问题描述
这些年随着微服务的流行,大家都在使用微服务架构,springcloud的一下组件也在被大家广泛的使用,其中,springcloud Configration就是其中之一。springcloud Configration为分布式系统中的外部化配置提供服务器端和客户端支持。使用Config Server,我们可以在中心位置管理所有环境中应用程序的外部属性。客户端和服务器上的概念与Spring Environment
和PropertySource
抽象,因此它们非常适合Spring应用程序,但可以与以任何语言运行的任何应用程序一起使用。在应用程序从开发人员到测试人员再到生产人员的整个部署过程中,您可以管理这些环境之间的配置,并确保应用程序具有它们迁移时所需的一切。服务器存储后端的默认实现使用git,因此它轻松支持带标签的配置环境版本,并且可以通过各种工具来访问这些内容来管理内容。添加替代实现并将其插入Spring配置很容易。
在springcloud Config 配置中心实现一文中,我已经实现了一个基于Eureka为注册中心的配置中心,但是其中还有些地方是需要优化的,比如说,在上面的文章中,我们的配置读取路径search-paths是写死的,这样一来,要么你的配置文件必须以项目名来命名,这样才能保证不通的项目放在一个路径下,大家都能访问到,然而这并不是我们想看到的。所以现在我们就需要实现动态配置。
实现
其实,springcloud Configration已经有解决方案了,
1.如果你的项目放在不通的git项目中,那么你只需在uri做如下配置:
uri: https://github.com/{application}
其中{application}
在请求时以下面的格式:organization(_)application
被设置。
2.如果你的所有配置都放在同一个git项目中,只需将search-path做如下配置:
search-paths: '{application}'
Configserver端的配置如下:
spring:
application:
name: cloud-config-server
cloud:
config:
server:
git:
uri: https://github.com/CrazySnailNO001/cloud-config
username: CrazySnailNO001
password: password
default-label: master #配置文件分支
search-paths: '{application}' #动态配置文件所在根目录
timeout: 2 #单位s
skip-ssl-validation: true #禁用配置服务器对Git服务器的SSL证书的验证
force-pull: true #在本地副本脏的情况下从远程存储库强制拉出
测试
创建ConfigClient端,具体的细节大家可以参考上面的那篇文章,这里只讲一下细节。关于Config的配置如下:
spring:
application:
name: cloud-config-client
cloud:
config:
uri: http://localhost:8760
label: master
profile: local
discovery:
enabled: true
service-id: cloud-config-server
request-connect-timeout: 3000
request-read-timeout: 3000
我的Config配置如下:
我们重点关注的是spring.application.name这个配置,我们的服务会根据这个去ConfigServer获取配置。启动我们的项目,可以看到日志输出:通过端口可以发现,它读到的是cloud-config-client的配置。
然后我们将我们的配置中的spring.application.name改成cloud-config-test02-client,再重新启动项目,可以看到日志输出:通过端口可以发现,它读到的是cloud-config-test02-client的配置。
其实我们也可以通过postman来获取配置:
cloud-config-client:
![](https://i-blog.csdnimg.cn/blog_migrate/e6f35832fb2b1123b5912f293938a8a7.png)
结论
测试结果说明我们的动态获取配置文件是生效的!
如果大家觉得我说的不是很清楚,具体的实现不知道怎么做的话,可以结合springcloud Config 配置中心实现一文。
另外更多的配置大家可以去了解一下:https://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.2.2.RELEASE/reference/html/