10.1寇壳、Spring Cloud Config簡介
Spring Cloud Config為分布式系統(tǒng)外部化配置提供了服務器和客戶端的支持添坊,它包括Config Server和Config Client兩部分太伊。由于Config Server和Config Client都實現(xiàn)了對Spring Environment和PropertySource抽象的映射雇锡,因此,Spring Cloud Config非常合適Spring應用程序僚焦,當然也可與任何其他語言編寫的應用程序配合使用锰提。
Config Server是一個可橫向擴展、集中式的配置服務器芳悲,它用于集中管理應用程序各個環(huán)境下的配置立肘,默認使用Git存儲配置文件內(nèi)容,也可以使用SVN存儲名扛,或者是本地文件存儲谅年。
Config Client是Config Server的客戶端,用于操作存儲在Config Server中的配置內(nèi)容肮韧。微服務在啟動時會請求Config Server獲取配置文件的內(nèi)容融蹂,請求到后再啟動容器。
使用Spring Cloud Config的架構(gòu):
10.2弄企、快速入門-搭建Config Server
10.2.1殿较、準備3個配置文件,推送git服務器
準備3個文件:
- demo-dev.properties
- demo-production.properties
- demo-test.properties
該文件的命名規(guī)則是:{application}-{profile}.properties
其內(nèi)容是(另外2個文件內(nèi)容稍有不同即可):
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/demo?userUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root
推送到git服務器桩蓉,這里使用github淋纲。
10.2.2、創(chuàng)建工程springcloud-demo-config
pom依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
10.2.3院究、再啟動類上增加注解@EnableConfigServer
10.2.4洽瞬、編寫application.properties
server.port=9999
spring.application.name=springcloud-demo-config
spring.cloud.config.server.git.uri=https://github.com/zuoqiyin/spring-cloud-config.git
spring.cloud.config.server.git.username=zuoqiyin@foxmail.com
spring.cloud.config.server.git.password=*****
10.2.5、啟動測試
測試已經(jīng)看到配置文件的內(nèi)容业汰。
請求配置文件的規(guī)則如下:
/{application}/{profile}/[label]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
其中{label}是指分支伙窃,默認是master。
10.3样漆、快速入門-搭建Config Client
我們再springclouf-demo-item項目中添加Config Client的支持为障。來讀取JDBC的配置文件的內(nèi)容。
10.3.1放祟、導入依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
10.3.2鳍怨、創(chuàng)建配置文件boostrap.properties
#對應的配置服務中的引用名稱
spring.cloud.config.name=demo
#對應配置服務地址
spring.cloud.config.uri=http://127.0.0.1:9999
# 對應配置服務中的{perfile}
spring.cloud.config.profile=dev
#對應分支
spring.cloud.config.label=master
10.3.3、編寫JdbcConfigBean
package cn.zuoqy.springclouddemoitem.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* Created by zuoqy on 14:18 2018/11/22.
*/
@Component // 加入到Spring容器
public class JdbcConfigBean {
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Value("${jdbv.driverClassName}")
private String driverClassName;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
@Override
public String toString() {
return "JdbcConfigBean{" +
"url='" + url + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
", driverClassName='" + driverClassName + '\'' +
'}';
}
}
10.3.4跪妥、編寫測試方法進行測試
再ItemController中編寫test方法
@Autowired
private JdbcConfigBean jdbcConfigBean;
@GetMapping(value = "test")
public String test() {
return this.jdbcConfigBean.toString();
}
10.3.5鞋喇、啟動測試
測試結(jié)果顯示已經(jīng)從Config Server中獲取到配置文件的內(nèi)容。
10.4眉撵、手動更新運行中的配置文件
10.4.1侦香、再springcloud-demo-item項目中加入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
10.4.2落塑、為JdbcConfigBean添加@RefreshScope
10.4.3饱须、再application.properties加上
#是否開啟actuator安全認證
management.security.enabled=false
10.4.4厌衙、post請求/refresh來更新配置內(nèi)容:
10.4.5赠橙、測試結(jié)果
發(fā)現(xiàn)可以更新配置信息散吵。
10.5缠沈、借助與git的webhook(web鉤子)實現(xiàn)自動跟新
github等git服務器提供了web hook功能:再倉庫中的資源發(fā)生更新時會通知給誰,這里的誰是一個url地址错蝴。
添加完成接下來測試發(fā)現(xiàn),配置文件內(nèi)容會動態(tài)更到Bean中颓芭。
10.6顷锰、Config Client配置的優(yōu)化
10.6.1、再springcloud-demo-config中添加Eureka的依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</exclusion>
</exclusions>
</dependency>
10.6.2亡问、再application.properties文件中增加
#是否將自己注冊到Eureka服務中,默認為true
eureka.client.register-with-eureka=true
#是否從Eureka中獲取信息
eureka.client.fetch-registry=true
#Eureka服務端與Eureka客戶端交互地址
eureka.client.serviceUrl.defaultZone=http://zuo:123456@127.0.0.1:8888/eureka/
10.6.3官紫、再啟動類中增加注解@EnableDiscoveryClient注解
10.6.4、重新啟動
可以看到再Eureka中已經(jīng)又配置中心得服務
10.6.5州藕、再springcloud-demo-item中修改bootstrap.properties配置
這里配置Eureka信息束世,因為Spring boot中bootstrap再application之前加載。
10.6.6床玻、測試
Spring Cloud—一毁涉、微服務架構(gòu)
Spring Cloud—二、Spring Cloud簡介
Spring Cloud—三锈死、使用Spring Cloud實現(xiàn)微服務
Spring Cloud—四贫堰、Spring Cloud快速入門
Spring Cloud—五、注冊中心Eureka
Spring Cloud—六待牵、使用Ribbon實現(xiàn)負載均衡
Spring Cloud—七其屏、容錯保護:Hystrix
Spring Cloud—八、使用Feign實現(xiàn)聲明式的Rest調(diào)用
Spring Cloud—九缨该、服務網(wǎng)關(guān)Spring Cloud Zuul
Spring Cloud—十偎行、使用Spring Cloud Config統(tǒng)一管理微服務
Spring Cloud—十一、使用Spring Cloud Bus(消息總線)實現(xiàn)自動更新