好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

详解使用spring cloud config来统一管理配置文件

当一个系统中的配置文件发生改变的时候,我们需要重新启动该服务,才能使得新的配置文件生效,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

查看更多关于详解使用spring cloud config来统一管理配置文件的详细内容...

  阅读:16次