使用Spring Cloud Config基于本地文件实现微服务配置管理

  Spring Cloud的开发基本是以配置为主,三板斧:pom.xml、元注解和property/yaml配置,其中最后一项配置如果服务一旦启动,就无法改变了,这时如果使用Spring Cloud Config进行配置管理,就可以在运行时进行配置统一更新。

     在微服务领域,我们系统中可能存在大量微服务,并且这些微服务有多个实例正在运行。手动更新配置属性或甚至使用自动脚本重新启动所有这些实例可能不可行。Spring Cloud Config解决了这个问题。

     我们可以创建一个Spring Cloud Config Server,它为我们所有的微服务提供配置值。我们可以使用gitsvn数据库 RedisConsul作为后端库来存储配置参数。然后在我们的微服务中配置Spring Cloud Config服务器的位置(微服务启动时默认把8888端口作为配置服务器检查,更改端口号需要配置。),这样在它们启动时从配置服务器加载所有属性。除此之外,每当我们更新配置属性时,我们都可以在我们的微服务中调用 REST端点/refresh,这样它就可以重新加载配置更改,而无需重新启动应用程序。

     通常默认Springcloud配置服务器是以git文件作为存储配置信息的载体,本文以本地文件为存储信息载体,这样的方式便于使用,不一定要准备Git环境。这两者区别在application.properties:

git配置是:

spring.cloud.config.server.git.uri=https://github.com/banq/jdonframewokr/microservices-config-repo

而本地文件是:

spring.profiles.active=native
spring.cloud.config.server.native.search-locations=classpath:/common-config

这样,我们需要在application.properties所在父目录resources下建立一个目录common-config,见下图,在其下放置配置文件application.properties或{spring.application.name}.properties,这两者区别后面再说。

现在我们从头开始建立配置服务器模块项目,从建立三板斧的第一个pom.xml配置开始:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>

第二是元注解:


@SpringBootApplication
@EnableConfigServer
public class ConfigserverApplication {

第三就是application.properties配置,之前开篇已经说明:

spring.application.name=configserver
server.port=8888

spring.profiles.active=native
spring.cloud.config.server.native.search-locations=classpath:/common-config

前两行是基本必备配置,其中端口是8888,配置服务器端口在Springcloud默认是8888,也就是说,如果我们配置成8888端口,其他访问这个配置服务器的客户端配置里面就无需再明确如下:

spring.cloud.config.uri=http://localhost:8888

现在我们的配置服务器已经弄好,怎么用呢?我们看到之前的Producer模块是服务生产者,它里面有个配置:

spring.application.name=PengProducerService
server.port=2111
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

其中第三行指定了eureka注册服务器的地址,这个地址我们搞成配置文件,那么注销这一行:

spring.application.name=PengProducerService
server.port=2111
#eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

     前面说过,这里面不用再配置spring.cloud.config.url了,因为默认约定端口是8888。我们把注销的这一行代码移动到配置服务器的classpath:common-config目录下,建立一个application.properties就可以了。当然如果想为PengProducerService专门配置,需要做点小动作,把producer模块服务生产者原来的application.properties改为bootstrap.properties,这个文件时先于application.properties启动的,然后将配置服务器项目中classpath:common-config下的application.properties改为{spring.application.name}.properties,这里的producer模块的{spring.application.name}.值是PengProducerService,因此,文件名为PengProducerService.properties。

    Producer模块作为配置服务器的客户端,还需要在pom.xml中配置:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>

SVN作为后端配置存储 

   上面主要以普通文件配置作为案例,如果使用SVN也是可以,在服务器配置中:

spring.profiles.active=subversion

spring.cloud.config.server.svn.uri= <my svn repo>
spring.cloud.config.server.svn.username=xxx
spring.cloud.config.server.svn.password=xxxx

在pom.xml中配置:

<dependency>
<groupId>org.tmatesoft.svnkit</groupId>
<artifactId>svnkit</artifactId>
</dependency>

    

以上源码:百度网盘

springcloud专题

 

猜你喜欢