springCloud Config
微服务意味着要将单体应用中的业务拆分成一个个的子服务,因此系统中存在大量的服务,每个服务都有一个配置文件,所以一套集中式、动态的配置管理设施是必不可少的。
SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持。
Springcloud Config 分为服务端和客户端两部分:
服务端也成为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器,并为客户端提供获取配置信息,加密、解密信息访问。
客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心加载配置信息,配置服务器默认采用git来存储配置信息,方便版本控制。
能干嘛?
1:集中管理配置文件。
2:不同环境不同配置,动态化配置更新,分环境部署比如dev、test、prod、release。
3:运行期间动态调整配置,服务不需要重启即可利用修改后的配置。
4、将信息以rest接口的形式暴露。
使用:
1:config-server服务端的使用:
1.1、添加maven 依赖:
<!-- spring-cloud-config-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
1.2、SpringBoot启动类注解:@EnableConfigServer
1.3、修改yml:
server:
port: 3344
spring:
application:
name: cloud-config-center
cloud:
config:
server:
git:
# git仓库地址
uri: git@github.com:dengwei-java/springCloud2020-config.git
#搜索目录
search-paths:
- springCloud2020-config
# 读取分支
label: master
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
config-dev.yml添加一个测试信息:
config:
info: "master branch , springCloud2020-config/config-dev.yml version = 3.0"
测试通过Config微服务是否可以从GitHub上获取配置内容:
启动3344服务:
访问任意一个yml文件:Http://yourIp:3344/master/config-dev.yml ; 如果能获取到配置文件的内容说明成功了。
http访问形式?(上面用到的第三种方式)
说明:
label: 分支
application: 服务名(eg: config)
profile: 环境(dev/test/prod)
SpringCloud Config 客户端的使用:
maven依赖:
<!--spring-cloud-starter-config 客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
Application.yml: 是用户级别的资源配置项。
Bootstrap.yml: 是系统级别的优先级更高。
Bootstrap.yml属性有高优先级,默认情况下,他们不会被本地配置覆盖,要将Client模块下的application.yml文件修改成bootstrap.yml,这是很关键的,因为bootstrap.yml是比application.yml先加载,优先级高于application.yml.
所以新建bootstrap.yml文件:
server: port: 3355 spring: application: name: cloud-config-client-3355 cloud: # Config 客户端的配置 config: label: master # 分支名字 name: config # 配置文件名称 profile: dev # 读取后缀名称 上述综合:master 分支上config-dev.yml的配置文件被读取 # uri: http://localhost:3344 # 配置中心地址 discovery: enabled: true service-id: cloud-config-center #配置中心地址(微服务名字) eureka: client: service-url: defaultZone: http://localhost:7001/eureka # 暴露监控端点 management: endpoints: web: exposure: include: "*"
问题:github上更新配置文件后,config服务端加载变了,但是client端没有改变,需要重启client 3355才能解决,怎么动态刷新呢?
1:添加pom:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2: 暴露端点:yml中添加:
# 暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
3:接口上添加@RefreshScope
4: 运维人员修改git上的配置后需要主动刷新3355配置客户端:
使用postman发送post请求到: http://localhost:3355/actuator/refresh 刷新一下即可。