詳解使用spring cloud config來統(tǒng)一管理配置文件
當(dāng)一個系統(tǒng)中的配置文件發(fā)生改變的時候,我們需要重新啟動該服務(wù),才能使得新的配置文件生效,spring cloud config可以實現(xiàn)微服務(wù)中的所有系統(tǒng)的配置文件的統(tǒng)一管理,而且還可以實現(xiàn)當(dāng)配置文件發(fā)生變化的時候,系統(tǒng)會自動更新獲取新的配置。
其架構(gòu)原理圖大致如下:

我們將配置文件放入git或者svn等服務(wù)中,通過一個Config Server服務(wù)來獲取git中的配置數(shù)據(jù),而我們需要使用的到配置文件的Config Client系統(tǒng)可以通過Config Server來獲取對應(yīng)的配置。
下面我們通過一個示例來演示一下config是如何被各個微服務(wù)系統(tǒng)獲取到的。
1.向git中上傳示例配置文件
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/taotao?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true jdbc.username=root jdbc.password=root
文件名分別為:
microservice-dev.properties microservice-production.properties microservice-test.properties
對應(yīng)不同的三個環(huán)境。
該文件的命名規(guī)則是:{application}-{profile}.properties
2.搭建Config Server
2.1 添加依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>
<!-- 導(dǎo)入Spring Cloud的依賴管理 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<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>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!-- 使用bus總線的方式通知所有的微服務(wù)配置文件需要刷新 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- 資源文件拷貝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java編譯插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
2.2 編寫ConfigApplication
@EnableDiscoveryClient
@EnableConfigServer //開啟配置服務(wù)
@SpringBootApplication
public class ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class, args);
}
}
2.3 編寫yml配置文件
server:
port: 6688 #服務(wù)端口
spring:
application:
name: microservice-config-server #指定服務(wù)名
cloud:
config:
server:
git: #配置git倉庫地址
uri: 具體的配置文件的git地址
#username:
#password:
rabbitmq: #RabbitMQ相關(guān)的配置
host: 127.0.0.1
port: 5672
username: guest
password: guest
eureka:
client:
registerWithEureka: true #是否將自己注冊到Eureka服務(wù)中,默認(rèn)為true
fetchRegistry: true #是否從Eureka中獲取注冊信息,默認(rèn)為true
serviceUrl: #Eureka客戶端與Eureka服務(wù)端進(jìn)行交互的地址
defaultZone: http://cloud:cloud@127.0.0.1:6868/eureka/
instance:
prefer-ip-address: true #將自己的ip地址注冊到Eureka服務(wù)中
ipAddress: 127.0.0.1
management:
security:
enabled: false #是否開啟actuator安全認(rèn)證
這是我們啟動該服務(wù),訪問該配置文件,訪問路徑示例如下(以該配置為例): 127.0.0.1:6688/microservice-dev.properties
訪問路徑的寫法也有多種方式:
/{application}/{profile}/[label]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
其中{label}是指分支,默認(rèn)是master。
3. Config Client的搭建
3.1 添加依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>
3.2 添加yml配置文件
eureka:
client:
serviceUrl: #Eureka客戶端與Eureka服務(wù)端進(jìn)行交互的地址
defaultZone: http://cloud:cloud@127.0.0.1:6868/eureka/
spring:
cloud:
config:
name: microservice #對應(yīng)的配置服務(wù)中的應(yīng)用名稱
profile: dev #對應(yīng)配置服務(wù)中的{profile}
label: master #對應(yīng)的分支
discovery:
enabled: true #啟用發(fā)現(xiàn)服務(wù)功能
service-id: microservice-config-server #指定服務(wù)名稱
spring:
application:
name: itcasst-microservice-config-server #指定服務(wù)名
cloud:
config:
server:
git: #配置git倉庫地址
uri: http://172.16.55.138:10080/zhangzhijun/itcast-config-server.git
#username: zhangzhijun
#password: 123456
rabbitmq: #RabbitMQ相關(guān)的配置
host: 127.0.0.1
port: 5672
username: guest
password: guest
注意,這里的yml配置文件是:bootstrap.yml,它和application.yml文件一樣,會被spring boot加載,但是bootstrap.yml會優(yōu)先加載。
3.3 在application.yml文件中添加配置
management: security: enabled: false #是否開啟actuator安全認(rèn)證
3.4 利用git的webhook實現(xiàn)實時更新通知

這個時候,我么通過@Value的方式,就可以獲取到對應(yīng)的配置了。
@RefreshScope
@Component//加入到Spring容器
public class JdbcConfigBean {
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Value("${jdbc.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 + "]";
}
}
再次測試,我們發(fā)現(xiàn)當(dāng)我們修改了git中的配置文件的內(nèi)容之后,client系統(tǒng)中讀取到的屬性也是修改之后的了。
到此為止,其架構(gòu)變成如下:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot環(huán)境Druid數(shù)據(jù)源使用及特點
Druid 是目前比較流行的高性能的,分布式列存儲的OLAP框架(具體來說是MOLAP)。本文給大家分享SpringBoot環(huán)境Druid數(shù)據(jù)源使用及特點介紹,感興趣的朋友跟隨小編一起看看吧2021-07-07
java中javamail發(fā)送帶附件的郵件實現(xiàn)方法
這篇文章主要介紹了java中javamail發(fā)送帶附件的郵件實現(xiàn)方法,較為詳細(xì)的分析了JavaMail發(fā)送郵件的用法,是非常實用的技巧,需要的朋友可以參考下2015-01-01
Feign如何使用protobuf的類作為參數(shù)調(diào)用
這篇文章主要介紹了Feign如何使用protobuf的類作為參數(shù)調(diào)用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
一文徹底弄懂Java中MultipartFile接口和File類
MultipartFile是一個接口,我們可以理解為是Spring?給我們綁定的一個在使用文件上傳等時簡便實現(xiàn)的口子,這篇文章主要給大家介紹了關(guān)于如何通過一文徹底弄懂Java中MultipartFile接口和File類的相關(guān)資料,需要的朋友可以參考下2023-11-11
Mybatis-plus使用注解 @TableField(exist = false)
這篇文章主要介紹了Mybatis-plus使用注解 @TableField(exist = false),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

