創建客戶端項目並讀取服務化的配置中心
將配置中心注冊到服務中心(Consul)
POM文件添加依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
配置文件添加內容:
spring.cloud.consul.host=127.0.0.1
spring.cloud.consul.port=8500
#注冊到consul的服務名稱
spring.cloud.consul.discovery.serviceName=spring-cloud-config
啟動Consul服務發現:
@SpringBootApplication
//啟動配置中心
@EnableConfigServer
//啟動服務發現
@EnableDiscoveryClient
public class SpringCloudConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudConfigServerApplication.class, args);
}
}
啟動配置中心服務端,並查看Consul后台:
注冊部署兩個配置中心
利用命令后和配置文件參數啟動兩個配置中心並注冊同一個服務名稱形成高可用,在spring-cloud-config-server項目根目錄下執行:
mvn install
將spring-cloud-config-server項目內application.properties文件拷貝到/spring-cloud-config-server/target/目錄下兩份,並重命名為application-1.properties和application-2.properties,然后修改配置文件內的端口號和應用名稱:
server.port=9004
spring.application.name=spring-cloud-config-server-01
server.port=9005
spring.application.name=spring-cloud-config-server-02
在/target/目錄下執行以下命令啟動兩個配置中心:
java -jar spring-cloud-config-server-0.0.1-SNAPSHOT.jar --spring.config.location=application-1.properties
java -jar spring-cloud-config-server-0.0.1-SNAPSHOT.jar --spring.config.location=application-2.properties
啟動配置中心服務端,並查看Consul后台:
創建讀取配置中心的客戶端項目
修改配置文件application.properties:
spring.application.name=spring-cloud-config-client
server.port=9006
spring.cloud.consul.host=127.0.0.1
spring.cloud.consul.port=8500
#設置不需要注冊到 consul 中
spring.cloud.consul.discovery.register=false
新建配置文件bootstrap.properties:
#配置文件名稱中定義的配置項目名稱
spring.cloud.config.name=ConfigDepot
#配置文件名稱中定義的環境名稱
spring.cloud.config.profile=Test
spring.cloud.config.label=master
#開啟配置中心的服務發現
spring.cloud.config.discovery.enabled=true
#配置中心注冊在服務中心的名字
spring.cloud.config.discovery.serviceId=spring-cloud-config
配置中心的內容要求先於application.properties被加載,所以關於配置中心的配置信息要寫在bootstrap.properties配置文件中,因為bootstrap.properties配置文件會先於application.properties被加載。
添加讀取配置的接口類:
@RestController
public class ConfigTestController {
//配置信息通過@Value注解讀取,配置項用${配置項}讀取
@Value("${bluersw.config}")
private String configBluersw;
@RequestMapping("/ConfigTest")
public String ConfigTest(){
return this.configBluersw;
}
}
啟動客戶端測試
訪問127.0.0.1:9006/ConfigTest,得到配置的信息Test-3(我中間改了幾次):
此時修改Git倉庫中配置的內容,再刷新頁面,頁面的內容是不會改變的,因為配置內容是在程序啟動的時候加載,配置中心內容改變是不會自動反映到客戶端程序中,但可以通過調用客戶端的刷新接口實現重新加載配置內容,這個內容我們放在總線部分演示。
源碼
Github倉庫:https://github.com/sunweisheng/spring-cloud-example