统一配置中心(Spring Cloud Config)
原因
- 配置方式不方便维护
- 配置内容与权限(针对线上)
- 每更新一个配置都要重启项目
ConfigServer使用
configServer从远端git拉下配置放到本地git如果远端不可用使用本地的
- pom
-
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
-
开启注解
@EnableDiscoveryClient @EnableConfigServer
-
没有配置对应的gituri
-
在git上新建项目
-
在配置中填写对应git uri,username,password
-
访问对应配置文件
- .properties展示为properties ,.yml为yml
- /{label}/{name}-{profiles}
- label->分支(不写默认master)
- name->文件名
- profiles->环境
-
设置配置文件基础目录
spring.cloud.config.server.git.basedir
ConfigClient使用
导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
更改配置
spring:
application:
name: order
cloud:
config:
discovery:
enabled: true
service-id: config
profile: dev
修改application.yml
修改为bootstrap.yml这样会优先启动
注意
配置中心会读取拼接order.yml+order-xx.yml的内容
Spring Cloud Bus
通过git hook访问配置文件变更,同步信息到消息队列,(/bus/refresh)
Config-server 通过消息队列同步到其他服务
使用
更新版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.BUILD-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.BUILD-SNAPSHOT</spring-cloud.version>
</properties>
导入jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
yml开放端口用来刷新对应变更
management:
endpoints:
web:
exposure:
include: bus-refresh
访问端口刷新配置
curl -v -X POST "http://localhost:8991/actuator/bus-refresh"
需要变更的类上面加上注解@RefreshScope
@RestController
@RequestMapping("/env")
@RefreshScope
public class EnvController {
@Value("${env}")
public String env;
@GetMapping("/profile")
public String getenv() {
return env;
}
}
通过 git HOOK自动访问地址
有bug
对应版本不支持hook