當一個系統中的配置文件發生改變的時候,我們需要重新啟動該服務,才能使得新的配置文件生效,spring cloud config可以實現微服務中的所有系統的配置文件的統一管理,而且還可以實現當配置文件發生變化的時候,系統會自動更新獲取新的配置。
其架構原理圖大致如下:
我們將配置文件放入git或者svn等服務中,通過一個config server服務來獲取git中的配置數據,而我們需要使用的到配置文件的config client系統可以通過config server來獲取對應的配置。
下面我們通過一個示例來演示一下config是如何被各個微服務系統獲取到的。
1.向git中上傳示例配置文件
1
2
3
4
|
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 |
文件名分別為:
1
2
3
|
microservice-dev.properties microservice-production.properties microservice-test.properties |
對應不同的三個環境。
該文件的命名規則是:{application}-{profile}.properties
2.搭建config server
2.1 添加依賴
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
<parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version> 1.5 . 4 .release</version> </parent> <!-- 導入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總線的方式通知所有的微服務配置文件需要刷新 --> <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
1
2
3
4
5
6
7
8
9
10
|
@enablediscoveryclient @enableconfigserver //開啟配置服務 @springbootapplication public class configapplication { public static void main(string[] args) { springapplication.run(configapplication. class , args); } } |
2.3 編寫yml配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
server: port: 6688 #服務端口 spring: application: name: microservice-config-server #指定服務名 cloud: config: server: git: #配置git倉庫地址 uri: 具體的配置文件的git地址 #username: #password: rabbitmq: #rabbitmq相關的配置 host: 127.0 . 0.1 port: 5672 username: guest password: guest eureka: client: registerwitheureka: true #是否將自己注冊到eureka服務中,默認為 true fetchregistry: true #是否從eureka中獲取注冊信息,默認為 true serviceurl: #eureka客戶端與eureka服務端進行交互的地址 instance: prefer-ip-address: true #將自己的ip地址注冊到eureka服務中 ipaddress: 127.0 . 0.1 management: security: enabled: false #是否開啟actuator安全認證 |
這是我們啟動該服務,訪問該配置文件,訪問路徑示例如下(以該配置為例): 127.0.0.1:6688/microservice-dev.properties
訪問路徑的寫法也有多種方式:
1
2
3
4
5
6
|
/{application}/{profile}/[label] /{application}-{profile}.yml /{label}/{application}-{profile}.yml /{application}-{profile}.properties /{label}/{application}-{profile}.properties 其中{label}是指分支,默認是master。 |
3. config client的搭建
3.1 添加依賴
1
2
3
4
5
6
7
8
9
10
11
12
|
<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配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
eureka: client: serviceurl: #eureka客戶端與eureka服務端進行交互的地址 spring: cloud: config: name: microservice #對應的配置服務中的應用名稱 profile: dev #對應配置服務中的{profile} label: master #對應的分支 discovery: enabled: true #啟用發現服務功能 service-id: microservice-config-server #指定服務名稱 spring: application: name: itcasst-microservice-config-server #指定服務名 cloud: config: server: git: #配置git倉庫地址 uri: http: //172.16.55.138:10080/zhangzhijun/itcast-config-server.git #username: zhangzhijun #password: 123456 rabbitmq: #rabbitmq相關的配置 host: 127.0 . 0.1 port: 5672 username: guest password: guest |
注意,這里的yml配置文件是:bootstrap.yml,它和application.yml文件一樣,會被spring boot加載,但是bootstrap.yml會優先加載。
3.3 在application.yml文件中添加配置
1
2
3
|
management: security: enabled: false #是否開啟actuator安全認證 |
3.4 利用git的webhook實現實時更新通知
這個時候,我么通過@value的方式,就可以獲取到對應的配置了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
@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 + "]" ; } } |
再次測試,我們發現當我們修改了git中的配置文件的內容之后,client系統中讀取到的屬性也是修改之后的了。
到此為止,其架構變成如下:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/mazhen1991/article/details/78513452