分布式配置中心:Spring Cloud Config
2019-06-09 本文已影响0人
neko_11
1、application.yml配置
对于SpringBoot应用,我们可以将配置内容写入application.yml,设置多个profile,也可以用多个application-{profile}.properties文件配置,并在启动时指定spring.profiles.active={profile}来加载不同环境下的配置。
在Spring Cloud微服务架构中,这种方式未必适用,微服务架构对配置管理有着更高的要求,如:
- 集中管理:
成百上千(可能没这么多)个微服务需要集中管理配置,否则维护困难、容易出错; - 运行期动态调整:
某些参数需要在应用运行时动态调整(如连接池大小、熔断阈值等),并且调整时不停止服务; - 自动更新配置:
微服务能够在配置发生变化是自动更新配置。
以上这些要求,传统方式是无法实现的,所以有必要借助一个通用的配置管理机制,通常使用配置服务器来管理配置。
2、Sping Cloud Config简介
Spring Cloud Config分为Config Server和Config Client两部分,为分布式系统外部化配置提供了支持。 Spring Cloud Config非常适合Spring应用程序,也能与其他编程语言编写的应用组合使用。
微服务在启动时,通过Config Client请求Config Server以获取配置内容,同时会缓存这些内容。
3、构建Config Server
创建一个spring-boot项目,引入依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
启动类添加注解@EnableConfigServer
:
@SpringBootApplication
@EnableConfigServer
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(BootApplication.class, args);
}
}
4、构建Config Client
在客户端的配置文件指定配置中心的地址即可。
spring:
cloud:
config:
uri: http://localhost:8769
fail-fast: true
profiles:
active: dev
5、Config Server读取本地配置文件
配置文件指定配置文件路径:
spring:
cloud:
config:
server:
native:
search-locations: classpath:/shared
# 指定本地方式
profiles:
active: native
在工程的resources目录下新建shared文件夹,新建config-client-dev.yml文件,配置写入该文件即可在客户端生效。
6、Config Server远程读取git仓库配置
配置文件指定配置文件路径:
spring:
cloud:
config:
server:
git:
# git地址
uri: xxxxxxxx
# 搜索远程仓库的文件夹地址
searchPaths: xxx
username: xxxx
password: xxxx
# 指定分支
label: master
将上述的配置文件上传到git,即可
7、高可用的配置中心
可以将服务注册到eureka,启动类添加注解@EnableEurekaClient
@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(BootApplication.class, args);
}
}
配置文件指定注册中心的地址:
eureka:
client:
serviceUrl:
defaultZone: xxxxxxxxxxxxxxx
添加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>