Java EE 目錄:https://blog.csdn.net/dkbnull/article/details/87932809
Spring Boot 專欄:https://blog.csdn.net/dkbnull/column/info/26341
Spring Cloud 專欄:https://blog.csdn.net/dkbnull/column/info/36820
0. 開發環境
-
IDE:IntelliJ IDEA 2017.1 x64
-
jdk:1.8.0_91
-
Spring Boot:2.1.1.RELEASE
-
Spring Cloud:Finchley.RELEASE
1. 新建父Maven工程
1.1 新建Maven工程
1.2 刪除src文件夾
1.3 引入依賴
父Maven工程pom文件定義爲父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">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.wbnull</groupId>
<artifactId>springclouddemo</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2. 新建Spring Boot服務提供者
2.1 新建Spring Boot服務
右鍵SpringCloudDemo–>New–>Module,選擇Maven項目
2.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>
<artifactId>springbootprovider</artifactId>
<packaging>jar</packaging>
<parent>
<groupId>cn.wbnull</groupId>
<artifactId>springclouddemo</artifactId>
<version>1.0.0</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
2.3 新建Spring Boot入口類
package cn.wbnull.springbootprovider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootProviderApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootProviderApplication.class, args);
}
}
2.4 新建application.yml
resources 文件夾下新建application.yml
server:
port: 8081
servlet:
context-path: /springbootprovider
spring:
application:
name: springbootprovider
2.5 新建控制器類
package cn.wbnull.springbootprovider.controller;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Scope("prototype")
public class GatewayController {
@GetMapping(value = "/gateway")
public String gateway() throws Exception {
return "hello world";
}
}
2.6 目錄結構
Spring Boot 服務目錄結構如下
3. 新建Spring Boot服務消費者
3.1 新建Spring Boot消費者
與創建Spring Boot服務提供者類似,新建Spring Boot服務消費者
3.2 引入依賴
與Spring Boot服務提供者依賴類似
<?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>
<artifactId>springbootconsumer</artifactId>
<packaging>jar</packaging>
<parent>
<groupId>cn.wbnull</groupId>
<artifactId>springclouddemo</artifactId>
<version>1.0.0</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
3.3 新建Spring Boot入口類
這裏要注意,與Spring Boot服務提供者入口類不同,服務消費者入口類新增了一段代碼。
RestTemplate是一個對HTTP請求進行了封裝的類,藉助RestTemplate,Spring應用能夠方便地使用REST資源。
package cn.wbnull.springbootconsumer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class SpringBootConsumerApplication {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(SpringBootConsumerApplication.class, args);
}
}
3.4 新建application.yml
server:
port: 8082
servlet:
context-path: /springbootconsumer
spring:
application:
name: springbootconsumer
3.5 新建控制器類
這裏的gateway()方法沒有自己的實現,而是去調用了服務提供者的gateway()方法。
package cn.wbnull.springbootconsumer.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@Scope("prototype")
public class GatewayController {
@Autowired
private RestTemplate restTemplate;
@GetMapping(value = "/gateway")
public String gateway() throws Exception {
return restTemplate.getForObject("http://localhost:8081/springbootprovider/gateway", String.class);
}
}
4. 測試
我們先啓動服務提供者,再啓動服務消費者,然後瀏覽器訪問 http://127.0.0.1:8082/springbootconsumer/gateway ,獲取到正確結果。到這,一個簡單Spring Cloud 項目的服務提供者和服務消費者就完成了。
GitHub:https://github.com/dkbnull/SpringCloudDemo
微信:https://mp.weixin.qq.com/s/7ZrgoRyAcs7agzpVtsWe4w