SpringBoot 如何优雅的实现动态更新配置?

312 天前
 bluecube13

想动态的更新某个 application.yml 中配置的 config 并让其生效,有什么优雅且简单的实现方式吗?

还有如下要求:

  1. 不使用 SpringCloud config
  2. 某个微服务有不固定数量的实例
  3. 系统不要有 downtime
2758 次点击
所在节点    程序员
34 条回复
zsdroid
311 天前
手撸一个注册中心
potatowish
311 天前
不使用配置中心服务,手撸一个简单的,配置保存在独立的数据库中,然后声明一个属性 bean ,读取配置,定时刷新即可。如果想做到自动实时刷新,可以监听一下对应配置表的 binlog 事件
lzrainchen
311 天前
不需要任何配置中心,不需要什么 config ,你只需要了解 ConfigurableEnvironment 、PropertySource 这两个就可以了,这些都是 spring-core 的能力,简单来讲 Spring 在运行时获取数据都是从这些来源查找的,不管你是在 application.properties 还是环境变量的都是从这些来源进行查找的。换句话来讲,spring-cloud-config 也是这么实现的,你可以很清楚的看到这些配置文件的可以来源于本地文件读取出来的,也可以是通过网络来的( git 、svn )都可以只要能读取出来然后往 PropertySource 里塞,你程序就可以读取到了,原理就是这么简单。简单的代码只需要两行
lzrainchen
311 天前
ConfigurableEnvironment environment = applicationContext.getEnvironment();
MutablePropertySources propertySources = environment.getPropertySources();
然后往 propertySources 里塞你的 key value 配置,如果配置有变动再放一遍就行了 实时变化的,所有的功能都是搭建再这些东西之上的
kerb15
311 天前
一直想知道 nacos 和 apollo 哪个资源占用高一点
XuHuan1025
311 天前
@tgich Refreshscope
wellerman
311 天前
nacos 推荐内存最低都 4G 了,还要多启个服务。apollo 通过 ConfigFactory 可以自定义配置,如读取数据库中的配置信息。
jdOY
311 天前
拿 redis 存,代码自己封装下,要用配置的时候读取的顺序 redis>配置文件>硬编码
james122333
310 天前
不要用 spring 自己写 整天 api 呼叫来呼叫去服务太多看起来有点傻
最简单就是挂载一个网路硬盘 侦测档案变化读入即可
可以用 Java watchservice
james122333
310 天前
这么做的好处是本机都可以检查
手刻党才是王道
20g
308 天前
@tgich 你要在 yml 配置 refresh:true ,这样子 nacos 发布的时候,后台就会自动更新配置文件了
tgich
307 天前
@20g 我这里 yml 里写的是 refresh-enabled:true
tgich
307 天前
@20g 我这里 yml 里写的是 refresh-enabled:true ,不知道 refresh:true 怎么没有提示
20g
306 天前

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/960561

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX