Spring Cloud Config是Spring-Cloud用于分布式配置管理的组件,分成Server和Client两种角色。Config-Server负责配置文件的分布式存储和管理,并通过HTTP接口对外提供Config-Client访问;Config-Client通过接口获得配置文件,加载到启动上下文并在应用中使用。
Config-Server端
1. Config-Server依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
2. 准备被管理的配置文件
Spring-Cloud-Config提供了对多种环境配置文件的支持,比如:开发环境,测试环境,生产环境等;为了更加全面的模拟,准备三个配置分别如下:
config-dev.properties
config-test.properties
config-pro.properties
3. 准备启动配置文件
被管理的配置文件可以来自多个地方,包括:本地文件,远程Git仓库以及远程Svn仓库,下面分别在resources/application.properties中做配置;
- 本地文件
spring.application.name=config-server
server.port=8888
spring.profiles.active=native
spring.cloud.config.server.native.searchLocations=file:E:/github/spring-cloud-config-repo
- 远程Git仓库
spring.application.name=config-server
server.port=8888
spring.profiles.active=git
spring.cloud.config.server.git.uri=https://github.com/ksfzhaohui/spring-cloud-config-repo
spring.cloud.config.server.git.default-label=master
- 远程svn仓库
spring.profiles.active=subversion
spring.cloud.config.server.svn.uri=https://NJD9YZGJ2-PC.99bill.com:8443/svn/spring-cloud-config-repo
spring.cloud.config.server.svn.username=root
spring.cloud.config.server.svn.password=root
spring.cloud.config.server.svn.default-label=
4. 配置启动入口
public class ConfigServer {
public static void main(String[] args) {
SpringApplication.run(ConfigServer.class, args);
}
}
@EnableConfigServer 注解启动配置中心。
5. 请求统一配置文件
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
例如:http://localhost:8888/config-dev.yml
Config-Client端
1. Config-Client依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
2. 配置Config配置中心
在配置文件resources/bootstrap.properties中做如下配置:注意:bootstrap.properties的加载优先与application.properties
spring.application.name=config
spring.cloud.config.label=master
spring.cloud.config.profile=test
spring.cloud.config.uri= http://localhost:8888/
spring.application.name:对应{application},本实例中是config;
spring.cloud.config.label:对应{label},指定server端配置的分支,此处填master即可;
spring.cloud.config.profile:对应{profile},指定client当前的环境,可选值:dev,test,pro;
spring.cloud.config.uri:server端地址;
3. 非bootstrap.properties配置文件中使用配置中心
在application.properties 或者其他properties中可以使用占位符的形式使用统一配置中心中配置的属性。
例如:application.properties 使用配置项foo
app.foo=${foo}
4. 在代码中直接引用配置属性
允许在所有Spring Bean中通过使用统一配置的属性。
例如:在HelloController中使用foo配置属性
@RestController
@RequestMapping(value = "/hello")
public class HelloController {
@Value("${foo}")
private String foo;
}
安全配置
1. 引入安全依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2. 配置安全用户名和密码
修改application.properties添加安全用户名和密码配置
management:
security:
enabled: false
security: # 配置中心的用户名密码
basic:
enabled: true
user:
name: admin
password: admin
3. Config-Client端修改Server.uri地址
修改bootstrap.properties中的config配置如下:
spring.cloud.config.uri= http://admin:admin@127.0.0.1:8080/
Spring-Cloud-Config配置的更新
手动调用刷新接口
- 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
- 暴露全部endpoints
在bootstrap.properties中添加
management.endpoints.web.exposure.include=*
- 修改HelloController
@RefreshScope
@RestController
public class HelloController {
@Value("${foo}")
String foo;
@RequestMapping(value = "/hello")
public String hello() {
return foo;
}
}
@RefreshScope 注解在手动执行刷新时,会更新改注解下的变量。
- 手动调用刷新接口
http://localhost:8889/actuator/refresh
消息总线自动更新
作者:自负的鱼
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。