10.1、Spring Cloud Config簡介
Spring Cloud Config為分布式系統(tǒng)外部化配置提供了服務(wù)器和客戶端的支持,它包括Config Server和Config Client兩部分。由于Config Server和Config Client都實現(xiàn)了對Spring Environment和PropertySource抽象的映射,因此,Spring Cloud Config非常合適Spring應(yīng)用程序,當(dāng)然也可與任何其他語言編寫的應(yīng)用程序配合使用。
Config Server是一個可橫向擴展、集中式的配置服務(wù)器,它用于集中管理應(yīng)用程序各個環(huán)境下的配置,默認(rèn)使用Git存儲配置文件內(nèi)容,也可以使用SVN存儲,或者是本地文件存儲。
Config Client是Config Server的客戶端,用于操作存儲在Config Server中的配置內(nèi)容。微服務(wù)在啟動時會請求Config Server獲取配置文件的內(nèi)容,請求到后再啟動容器。
使用Spring Cloud Config的架構(gòu):

10.2、快速入門-搭建Config Server
10.2.1、準(zhǔn)備3個配置文件,推送git服務(wù)器
準(zhǔn)備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服務(wù)器,這里使用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}是指分支,默認(rèn)是master。
10.3、快速入門-搭建Config Client
我們再springclouf-demo-item項目中添加Config Client的支持。來讀取JDBC的配置文件的內(nèi)容。
10.3.1、導(dǎo)入依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
10.3.2、創(chuàng)建配置文件boostrap.properties
#對應(yīng)的配置服務(wù)中的引用名稱
spring.cloud.config.name=demo
#對應(yīng)配置服務(wù)地址
spring.cloud.config.uri=http://127.0.0.1:9999
# 對應(yīng)配置服務(wù)中的{perfile}
spring.cloud.config.profile=dev
#對應(yīng)分支
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、編寫測試方法進(jìn)行測試
再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安全認(rèn)證
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服務(wù)器提供了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服務(wù)中,默認(rèn)為true
eureka.client.register-with-eureka=true
#是否從Eureka中獲取信息
eureka.client.fetch-registry=true
#Eureka服務(wù)端與Eureka客戶端交互地址
eureka.client.serviceUrl.defaultZone=http://zuo:123456@127.0.0.1:8888/eureka/
10.6.3、再啟動類中增加注解@EnableDiscoveryClient注解

10.6.4、重新啟動

可以看到再Eureka中已經(jīng)又配置中心得服務(wù)
10.6.5、再springcloud-demo-item中修改bootstrap.properties配置

這里配置Eureka信息,因為Spring boot中bootstrap再application之前加載。
10.6.6、測試

Spring Cloud—一、微服務(wù)架構(gòu)
Spring Cloud—二、Spring Cloud簡介
Spring Cloud—三、使用Spring Cloud實現(xiàn)微服務(wù)
Spring Cloud—四、Spring Cloud快速入門
Spring Cloud—五、注冊中心Eureka
Spring Cloud—六、使用Ribbon實現(xiàn)負(fù)載均衡
Spring Cloud—七、容錯保護:Hystrix
Spring Cloud—八、使用Feign實現(xiàn)聲明式的Rest調(diào)用
Spring Cloud—九、服務(wù)網(wǎng)關(guān)Spring Cloud Zuul
Spring Cloud—十、使用Spring Cloud Config統(tǒng)一管理微服務(wù)
Spring Cloud—十一、使用Spring Cloud Bus(消息總線)實現(xiàn)自動更新