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

2023-07-28 15:29:42 +08:00
 bluecube13

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

还有如下要求:

  1. 不使用 SpringCloud config
  2. 某个微服务有不固定数量的实例
  3. 系统不要有 downtime
3106 次点击
所在节点    程序员
34 条回复
liprais
2023-07-28 15:30:46 +08:00
滚动发布不就完了
bluecube13
2023-07-28 15:31:33 +08:00
@liprais #1 老哥能不能稍微详细的说一下,谢谢
dddd1919
2023-07-28 15:38:35 +08:00
Apollo config
taylorzhi
2023-07-28 15:40:54 +08:00
Nacos
senjyougahara
2023-07-28 16:00:18 +08:00
nacos+1
N9f8Pmek6m8iRWYe
2023-07-28 16:14:22 +08:00
BiChengfei
2023-07-28 16:18:24 +08:00
配置项改成外部读取,例如数据库、宿主机配置文件
20g
2023-07-28 16:24:50 +08:00
nacos 配置就好了,改了配置重新发布 nacos ,不需要停机发布了
AmaQuinton
2023-07-28 16:29:55 +08:00
部署在 k8s 上
tgich
2023-07-28 16:48:45 +08:00
@20g 为何我司的 nacos 重新发布还要重启服务,不重启服务还是老配置,什么原因
Masoud2023
2023-07-28 16:49:19 +08:00
不谈用谁家的 solution ,你要是 SpringCloud 都不想用的话那基本无解了,动态配置管理本来就是 SpringCloud 的东西,要么就自己写一个 service 搞 RPC 去读配置,但是太费劲了。

SpringCloud 有什么不能用的?那东西其实没多难的。
Masoud2023
2023-07-28 16:52:10 +08:00
@tgich #10 yml `refresh: true` 配置了吗
zjw7sky
2023-07-28 16:53:27 +08:00
nacos
Jrue0011
2023-07-28 16:58:55 +08:00
不想引入 Spring Cloud Config ,是指不想引入运维 Spring Cloud Config Server (或者 Nacos 、Apollo 这些配置中心)的成本?

不过至少要引入 RefreshScope 的实现吧,应该是 Spring Cloud Common/Spring Cloud Context 。然后自己参考上面那些配置中心是怎么结合 RefreshScope 实现动态刷新的,然后自己写一个监听文件(单机)/监听 Zookeeper 、Redis 、数据库(多实例)实现。
bluecube13
2023-07-28 16:59:27 +08:00
感谢各位 v 友的回复!我都了解看看!
damai0419
2023-07-28 17:08:20 +08:00
如果你的需求很简单,可以参考 https://juejin.cn/post/7049177692754673694#heading-3 的最后一小节,自己简单的写一个接口就可以了。
burymme11
2023-07-28 18:13:33 +08:00
SpringCloud config 或者 k8s configMap.
ourslay
2023-07-28 18:50:13 +08:00
refresh-scope 应该比较优雅实现。只需要引入 spring-cloud-commons 依赖即可
https://docs.spring.io/spring-cloud-commons/docs/4.0.3/reference/html/#refresh-scope
Ericcccccccc
2023-07-28 18:51:22 +08:00
你需要的是配置中心. 这和 spring 没关系, 本质是个定时更新数据到本地缓存, 然后读缓存的逻辑.
v2eb
2023-07-28 18:57:52 +08:00
自己写个配置的地方, 每次触发主动向下游系统推送下, 要不下游系统定时拉取下🐒

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

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

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

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

© 2021 V2EX