spring cloud簡介
spring cloud為開發人員提供了快速構建分布式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分布式會話等等。它運行環境簡單,可以在開發人員的電腦上跑。另外說明spring cloud是基於springboot的,所以需要開發中對springboot有一定的了解
在之前的所有Spring Boot相關博文中,都會涉及Spring Boot工程的創建。而創建的方式多種多樣,我們可以通過Maven來手工構建或是通過腳手架等方式快速搭建,也可以通過SPRING INITIALIZR頁面工具來創建,相信每位讀者都有自己最喜歡和最為熟練的創建方式。
本文我們將介紹嵌入的Intellij中的Spring Initializr工具,它同Web提供的創建功能一樣,可以幫助我們快速的構建出一個基礎的Spring Cloud工程。
創建工程
第一步:菜單欄中選擇File=New=Project..,我們可以看到如下圖所示的創建功能窗口。其中Initial Service Url指向的地址就是Spring官方提供的Spring Initializr工具地址,所以這里創建的工程實際上也是基於它的Web工具來實現的。
項目結構:
我測試了連接數據庫查詢數據,不多說先配置依賴:
pom.xml:文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!-- 這是Spring Boot的核心啟動器,包含了自動配置、日志和YAML。--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!--支持常規的測試依賴,包括JUnit、Hamcrest、Mockito以及spring-test模塊。--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--S支持全棧式Web開發,包括Tomcat和spring-webmvc--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--數據庫連接 --> <!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client --> <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> <version>2.4.1</version> </dependency> <!--支持JPA(Java Persistence API. ,包括spring-data-jpa、spring-orm、Hibernate。--> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <version>2.1.3.RELEASE</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.properties:配置
server.port=3333 # 數據源配置 spring.datasource.driver-class-name=org.mariadb.jdbc.Driver spring.datasource.url=jdbc:mariadb://localhost:3306/stu spring.datasource.username=root spring.datasource.password=666666 spring.jpa.hibernate.ddl-auto=update # 如果是mariadb,需要配置這個 spring.database-platform=org.hibernate.dialect.MariaDB10Dialect
controller層:
package com.example.demo.controller; import com.example.demo.entity.News; import com.example.demo.service.Impl.NewsServiceImp; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class NewsController{ @Autowired private NewsServiceImp newsServiceImp; //查詢 @RequestMapping(value = "/listNews", method = RequestMethod.GET) public ResponseEntity getNews() { List<News> news = newsServiceImp.listAll(); return ResponseEntity.ok(news); } }
dao層:
package com.example.demo.dao; import com.example.demo.entity.News; import org.springframework.data.jpa.repository.JpaRepository; public interface NewsMapper extends JpaRepository<News,Integer> { }
entity層:
package com.example.demo.entity; import javax.persistence.*; @Entity @Table(name = "news") //表名 public class News { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) //標明該字段是自動增長 private int id; private String title; private String body; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } }
service層 里面包含的一個Impl 的包,下面放的是實現接口類:
package com.example.demo.service; import com.example.demo.entity.News; import java.util.List; public interface NewsService { List<News> listAll(); void add (News news); void del (int id); void update(News news); }
Impl下:
package com.example.demo.service.Impl; import com.example.demo.dao.NewsMapper; import com.example.demo.entity.News; import com.example.demo.service.NewsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class NewsServiceImp implements NewsService { @Autowired private NewsMapper newsMapper; @Override public List<News> listAll() { return newsMapper.findAll(); } @Override public void add(News news) { newsMapper.save(news); } @Override public void del(int id) { newsMapper.deleteById(id); } @Override public void update(News news) { newsMapper.save(news); } }
下面啟動看效果:
數據庫已經查詢出來