前提:SpringBoot可以離開SpringCloud獨立使用開發項目,但是SpringCloud離不開SpringBoot,屬於依賴的關系.
所以此處搭建一個基礎的SpringBoot 多模塊的項目
一: 創建父模塊
1.創建一個maven項目,填寫groupid和artifactId,並修改packing為pom
2. 添加相應的依賴
<?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> <groupId>com.ligong.springcloud</groupId> <artifactId>microservicecloud</artifactId> <version>1.0-SNAPSHOT</version> <modules> <module>microservicecloud-api</module> <module>microservicecloud-provider</module> </modules> <packaging>pom</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.compiler.source>1.8</project.compiler.source> <project.compiler.target>1.8</project.compiler.target> <junit.verion>4.12</junit.verion> <log4j.version>1.2.17</log4j.version> <lombok.version>1.6.18</lombok.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR1</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.1.3.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.15</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.3</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.verion}</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> </dependencies> </dependencyManagement> </project>
二: 創建子模塊
1.新建microservicecloud-api子模塊
在父工程下右鍵new->Module 創建一個子模塊,這里選擇maven/Spring initializr都可以
此處我采用的是maven創建,填寫artifactId finish即可
microservicecloud-api的pom文件,注意,打包方式為jar
<?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"> <parent> <artifactId>microservicecloud</artifactId> <groupId>com.ligong.springcloud</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <packaging>jar</packaging> <artifactId>microservicecloud-api</artifactId> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.8</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>javax.persistence-api</artifactId> <version>2.2</version> </dependency> </dependencies> </project>
在api子模塊下新建一個entities包,創建一個dept class。
此處采用jpa作為持久層,所以api的pom文件中需要導入相關jpa的依賴
@Data @Entity @Table(name = "t_dept") @NoArgsConstructor @AllArgsConstructor @JsonIgnoreProperties(value={"hibernateLazyInitializer","handler", "fieldHandler"}) @Accessors(chain = true) public class Dept implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer deptNo; @Column(name = "d_name") private String deptName; /** * 來源於哪個數據庫 */ @Column(name = "db_source") private String dbSource; }
2.創建provider子模塊,用於對外提供服務。
創建過程與上面類似,就不在贅述
provider的pom文件,注意打包方式為war
<?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"> <parent> <artifactId>microservicecloud</artifactId> <groupId>com.ligong.springcloud</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <packaging>war</packaging> <artifactId>microservicecloud-provider</artifactId> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!--熱部署--> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <version>2.1.4.RELEASE</version> </dependency> <dependency> <groupId>com.ligong.springcloud</groupId> <artifactId>microservicecloud-api</artifactId> <version>1.0-SNAPSHOT</version> <!--<scope>compile</scope>--> </dependency> </dependencies> </project>
1. 創建DeptRepository
@Repository public interface DeptRepository extends JpaRepository<Dept,Integer> { }
2. 創建DeptService
public interface DeptService { boolean add(Dept dept); Dept get(Integer id); List<Dept> list(); }
3. 創建DeptServiceImpl
@Service @Slf4j public class DeptServiceImpl implements DeptService { @Autowired private DeptRepository deptRepository; public Dept get(Integer id){ return deptRepository.getOne(id); } public boolean add(Dept dept){ try{ deptRepository.save(dept); }catch (Exception e){ log.error("添加dept 失敗!"+e.getMessage()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return false; } return true; } public List<Dept> list(){ return deptRepository.findAll(); } }
4. 創建DeptController,(定義rest風格的請求方式)
ps:
@RestController public class DeptController { @Autowired private DeptService deptService; @PostMapping("/dept") public boolean add(@RequestBody Dept dept){ return deptService.add(dept); } @GetMapping("/dept/{id}") public Dept get(@PathVariable("id") Integer id){ return deptService.get(id); } @GetMapping("/dept/list") public List<Dept> list(){ return deptService.list(); } }
5. 定義SpringBoot啟動類(如果采用Spring initializr創建的子module可以跳過)
@SpringBootApplication public class DeptProvider8080App { public static void main(String[] args) { SpringApplication.run(DeptProvider8080App.class,args); } }
6. 編寫application.yml文件
server:
port: 8080 #Server port
spring:
application:
name: microservercloud-dept
datasource:
type: com.alibaba.druid.pool.DruidDataSource # alibaba 數據源
driver-class-name: org.gjt.mm.mysql.Driver # mysql驅動
url: jdbc:mysql://xx.xx.xx.xx:3306/cloudDB01 # jdbc url
username: root
password: root
dbcp2:
min-idle: 5
initial-size: 5
max-total: 5
max-wait-millis: 200
jpa:
hibernate:
ddl-auto: update # create/update table
properties:
hibernate:
format_sql: true #格式化sql
enable_lazy_load_no_trans: true
dislect: org.hibernate.dialect.MySQL5Dialect #定義mysql方言
open-in-view: true
show-sql: true #顯示sql
三: 測試環境搭建
運行SpringBoot啟動類,查看啟動狀態
采用postman測試
測試/dept 添加接口,body添加
測試/dept/{id}接口
最后/dept/list查看數據是否添加成功
四:創建consumer消費者通過RestTemplate調用provider的接口
1.創建maven module,修改pom文件
<?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"> <parent> <artifactId>microservicecloud</artifactId> <groupId>com.ligong.springcloud</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <packaging>jar</packaging> <artifactId>microservicecloud-consumer</artifactId> <dependencies> <dependency> <groupId>com.ligong.springcloud</groupId> <artifactId>microservicecloud-api</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--熱部署--> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <version>2.1.4.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> </project>
2.定義ConfigBean
@Configuration public class ConfigBean { /** * LoadBalanced表示開啟負載均衡 * @return RestTemplate */ @Bean @LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
3.定義consumer的controller
@RestController public class DeptControllerConsumer { private static final String REST_URL_PREFIX = "http://localhost:8001/"; @Autowired private RestTemplate restTemplate; @GetMapping("/consumer/dept/{id}") public Dept get(@PathVariable Integer id){ return restTemplate.getForObject(REST_URL_PREFIX + "dept/"+id, Dept.class); } @GetMapping("/consumer/dept") public boolean add(Dept dept){ return restTemplate.postForObject(REST_URL_PREFIX + "dept",dept,Boolean.class); } @GetMapping("/consumer/dept/list") public List<Dept> list(){ return restTemplate.getForObject(REST_URL_PREFIX + "dept/list",List.class); } }
4. 創建DeptConsumer80App啟動類
@SpringBootApplication public class DeptConsumer80App { public static void main(String[] args) { SpringApplication.run(DeptConsumer80App.class,args); } }
5. 啟動
6. 通過postman進行測試
至此,SpringCloud的基礎環境搭建完畢!