官网的spring cloud config文档:Spring Cloud Config
server端主要读取远程源的配置信息到本地,然后给后台微服务提供统一的配置中心。
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-config-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
使用spring cloud config server需要在主启动类中配置@EnableConfigServer
注解,以确保开启configServer的配置。
@SpringBootApplication
@EnableConfigServer
public class ConfigServer {
public static void main(String[] args) {
SpringApplication.run(ConfigServer.class, args);
}
}
需要在application.yml配置文件中配置git的远程仓库地址。配置后,spring cloud config server将会和远程仓库的文件进行信息的同步。
server:
port: 9001
spring:
application:
name: cloud-config9001
cloud:
config:
server:
git:
uri: xxx.git #仓库地址
search-paths: springcloud-config #扫描路径
label: master
除了github仓库以外,spring cloud config server还支持重其他源读取配置信息,如AWS的S3
spring:
profiles:
active: awss3
cloud:
config:
server:
awss3:
region: us-east-1
bucket: bucket1
配置好并启动好spring cloud config项目后,我们就可以通过以下资源路径来获取配置信息啦。其中:
label 分支
application 配置名(一般为微服务应用名)
profile 配置概述(如:dev)
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
官方示例:
curl localhost:8888/foo/development
curl localhost:8888/foo/development/master
curl localhost:8888/foo/development,db/master
curl localhost:8888/foo-development.yml
curl localhost:8888/foo-db.properties
curl localhost:8888/master/foo-db.properties
maven依赖导入:
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-config -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
加载文件优先级如下:
先加载优先级高的bootstrap.yml配置,然后再加载优先级第的application.yml,并且优先级高的配置会覆盖优先级低的,也就是说bootstrap.yml先于application.yml(bootstrap.yml和application.yml都有的配置,就选择bootstrap.yml的配置)
为了确保微服务自身的配置优先级高于公共配置信息(本地仓库的公共配置或远程的公共配置),所以微服务自身的配置文件我们命名为bootstrap.yml。
spring:
application:
name: cloud-config-client
cloud:
config:
label: master #分支
name: config #配置名
profile: dev #信息后缀(对应上面的profile)
uri: http://localhost:9001 #配置中心
server端的配置来github等其他源,是属于直接获取的,server端的配置能动态刷新,但是其他config client端想要动态刷新配置,必须在bootstrap.yml添加另外一些配置信息,并且需要添加一些maven依赖。
maven依赖
监控器依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
暴露监控端点
management:
endpoints:
web:
exposure:
include: *
通过网络接口发起post请求刷新
对http://localhost:8888/actuator/refresh
发起post请求,以刷新微服务的配置信息。
@RefreshScope注解
有时后你的代码用会用到一些配置文件的信息,如:一些自定义的bean通过@value
注入application.yml中的某些值,或者通过@ConfigurationProperties
映射到application.yml中的某些自定义配置项。
这些信息可以通过@RefreshScope
来解决动态跟新的配置信息,如下代码中,那么我myconfigbeans就可以通过@RefreshScope
以刷新注入到自定义bean中的值。
@Component
@RefreshScope //使得每次获取bean都是得到配置文件中的最新值
public class myconfigbeans {
@Value("${configbeans.user}") //配置文件中的configbeans.user=“YAO”
String user;
}
要使用广播以刷新配置,就要配合spring cloud bus使用,spring cloud bus和spring cloud Stream息息相关。
Stream通过对消息中间件进行抽象封装,提供一个统一的接口供我们发送和监听消息,而Bus则是在Stream基础之上再次进行抽象封装,使得我们可以在不用理解消息发送、监听等概念的基础上使用消息来完成业务逻辑的处理。