Spring Cloud的开发基本是以配置为主,三板斧:pom.xml、元注解和property/yaml配置,其中最后一项配置如果服务一旦启动,就无法改变了,这时如果使用Spring Cloud Config进行配置管理,就可以在运行时进行配置统一更新。
在微服务领域,我们系统中可能存在大量微服务,并且这些微服务有多个实例正在运行。手动更新配置属性或甚至使用自动脚本重新启动所有这些实例可能不可行。Spring Cloud Config解决了这个问题。
我们可以创建一个Spring Cloud Config Server,它为我们所有的微服务提供配置值。我们可以使用 git , svn , 数据库 Redis 或 Consul 作为后端库来存储配置参数。然后在我们的微服务中配置Spring Cloud Config服务器的位置,这样在它们启动时从配置服务器加载所有属性。除此之外,每当我们更新配置属性时,我们都可以在我们的微服务中调用 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这个配置服务器的客户端中有spring.profiles.active=mysql的配置,也就是在 Producer中需要使用数据源配置了,并指定了这个配置文件时mysql,那么在配置服务器那里需要配置一个mysql.properties文件放置数据源配置信息,可以在配置服务器的common-config配置三种application.properties、{ spring.application.name }.properties和{spring.profiles.active}.properties
以上源码: 百度网盘
springcloud专题