当一个系统中的配置文件发生改变的时候,我们需要重新启动该服务,才能使得新的配置文件生效,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服务端进行交互的地址
defaultzone: http: //cloud:cloud@127.0.0.1:6868/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服务端进行交互的地址
defaultzone: http: //cloud:cloud@127.0.0.1:6868/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