1,Spring Cloud Config介绍
Spring Cloud Config是对微服务的配置文件进行统一管理的。其工作原理是:
我们首先需要将各个微服务公共的配置信息推送到 GitHub 远程版本库。
然后我们再定义一个 Spring Cloud Config Server,其会连接上这个 GitHub 远程库。
这样我们就可以定义 Config 版的 Eureka Server、提供者与消费者了,它们都将作为 Spring Cloud Config Client 出现,它们都会通过连接 Spring Cloud Config Server 连接上 GitHub 上的远程库,以读取到指定配置文件中的内容。
2,新建配置文件目录,添加配置文件并上传到git仓库
在原有项目根目录下新建一个文件夹 service-config
将以前的项目application.yml配置文件复制到此目录下。
这里测试,只把provider的配置文件provider-application-test.yml放到这个目录下,提交该目录到git。provider-application-test.yml已经添加好多环境配置
server:
port: 8081
spring:
profiles:
active: develop
application:
name: provider-depart
---
spring:
profiles: develop
jpa:
generate-ddl: true
show-sql: true
hibernate:
ddl-auto: none
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/testdata?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: root
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8000/eureka
logging:
# 设置日志输出格式
pattern:
console: level-%level %msg%n
level:
root: info
org.hibernate: info
org.hibernate.type.descriptor.sql.BasicBinder: trace
org.hibernate.type.descriptor.sql.BasicExtractor: trace
com.demo.provider018081: debug
---
spring:
profiles: master
jpa:
generate-ddl: true
show-sql: true
hibernate:
ddl-auto: none
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://xxxx:3306/testdata2?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: root
eureka:
client:
service-url:
defaultZone: http://xxxx:8000/eureka
logging:
# 设置日志输出格式
pattern:
console: level-%level %msg%n
level:
root: error
org.hibernate: warn
org.hibernate.type.descriptor.sql.BasicBinder: trace
org.hibernate.type.descriptor.sql.BasicExtractor: trace
com.demo.provider018081: warn
---
# Eureka工作界面中instance-id处链接的信息
info:
company.name: www.abc.com
company.addr: China Beijing
company.tel: 12345678
app.name: abc-msc
app.desc: mic-server-cloud
author: abc
3,创建配置管理工程configserver-8095
3.1 创建一个 Spring Initializr工程
命名为configserver-8095,其仅需要一个 Config Server和eureka客户端依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!--eureka客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3.2 定义配置文件
从码云仓库读取项目仓库地址,因为我们只需要配置文件yml,不需要其他模块的东西,所以需要searchPaths 过滤一下
server:
port: 8095
spring:
application:
name: config-service
cloud:
config:
server:
git:
uri: https://gitee.com/luckylanyu/SpringCloud.git
#搜索顶级和“service-config/”子目录以及名称以“test”开头的任何子目录中的配置文件。
searchPaths: service-config,test*
username: xxx
password: xxx
timeout: 5
# 分支,(git仓库定义)
default-label: develop
# 环境(配置文件内定义)
profile: develop
client:
ip-address: http://127.0.0.1
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8000/eureka/
4,外部配置版的provider
将原来的provider工程的application.yml文件删除(也就是已经放到配置文件仓库的provider-application-test.yml文件),新建bootstrap.yml。
- bootstrap.yml 中配置的是应用启动时所必须的配置信息。
- application.yml 中配置的是应用运行过程中所必须的配置信息
- bootstrap.yml 优先于 application.yml 进行加载。
spring:
cloud:
config:
# 配置管理工程地址
uri: http://127.0.0.1:8095
# 配置文件名,省略后缀
name: provider-application-test
# git分支
label: develop
# 文件内定义的环境
profile: develop
----------------------到这里配置管理就可以生效了-------------------
5,配置自动更新
GitHub 中提供了 Webhooks 功能来确保远程库中的配置文件更新后,客户端中的配置信
息也可以实时更新。具体实现方式可参考如下一篇博文:
https://blog.csdn.net/qq_32423845/article/details/79579341
这种方式存在的弊端:
- 每个 Config Client 主机都需要在 GitHub 中进行注册
- 每个 Config Client 需要从 GitHub 上更新配置,都需要提交一个 post 请求,即若有 N 多 个 Config Client,则需要提交 N 多个请求。
生产环境下一般使用的是 Spring Cloud Bus 完成配置文件的自
动更新。