想动态的更新某个 application.yml 中配置的 config 并让其生效,有什么优雅且简单的实现方式吗?
还有如下要求:
1
liprais 2023-07-28 15:30:46 +08:00
滚动发布不就完了
|
2
bluecube13 OP @liprais #1 老哥能不能稍微详细的说一下,谢谢
|
3
dddd1919 2023-07-28 15:38:35 +08:00 4
Apollo config
|
4
taylorzhi 2023-07-28 15:40:54 +08:00
Nacos
|
5
senjyougahara 2023-07-28 16:00:18 +08:00
nacos+1
|
6
N9f8Pmek6m8iRWYe 2023-07-28 16:14:22 +08:00
|
7
BiChengfei 2023-07-28 16:18:24 +08:00
配置项改成外部读取,例如数据库、宿主机配置文件
|
8
20g 2023-07-28 16:24:50 +08:00
nacos 配置就好了,改了配置重新发布 nacos ,不需要停机发布了
|
9
AmaQuinton 2023-07-28 16:29:55 +08:00
部署在 k8s 上
|
11
Masoud2023 2023-07-28 16:49:19 +08:00
不谈用谁家的 solution ,你要是 SpringCloud 都不想用的话那基本无解了,动态配置管理本来就是 SpringCloud 的东西,要么就自己写一个 service 搞 RPC 去读配置,但是太费劲了。
SpringCloud 有什么不能用的?那东西其实没多难的。 |
12
Masoud2023 2023-07-28 16:52:10 +08:00
@tgich #10 yml `refresh: true` 配置了吗
|
13
zjw7sky 2023-07-28 16:53:27 +08:00
nacos
|
14
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 、数据库(多实例)实现。 |
15
bluecube13 OP 感谢各位 v 友的回复!我都了解看看!
|
16
damai0419 2023-07-28 17:08:20 +08:00
如果你的需求很简单,可以参考 https://juejin.cn/post/7049177692754673694#heading-3 的最后一小节,自己简单的写一个接口就可以了。
|
17
burymme11 2023-07-28 18:13:33 +08:00
SpringCloud config 或者 k8s configMap.
|
18
ourslay 2023-07-28 18:50:13 +08:00 via iPhone
refresh-scope 应该比较优雅实现。只需要引入 spring-cloud-commons 依赖即可
https://docs.spring.io/spring-cloud-commons/docs/4.0.3/reference/html/#refresh-scope |
19
Ericcccccccc 2023-07-28 18:51:22 +08:00
你需要的是配置中心. 这和 spring 没关系, 本质是个定时更新数据到本地缓存, 然后读缓存的逻辑.
|
20
v2eb 2023-07-28 18:57:52 +08:00
自己写个配置的地方, 每次触发主动向下游系统推送下, 要不下游系统定时拉取下🐒
|
21
zsdroid 2023-07-28 19:00:55 +08:00
手撸一个注册中心
|
22
potatowish 2023-07-28 19:12:07 +08:00 via iPhone
不使用配置中心服务,手撸一个简单的,配置保存在独立的数据库中,然后声明一个属性 bean ,读取配置,定时刷新即可。如果想做到自动实时刷新,可以监听一下对应配置表的 binlog 事件
|
23
lzrainchen 2023-07-28 19:40:28 +08:00
不需要任何配置中心,不需要什么 config ,你只需要了解 ConfigurableEnvironment 、PropertySource 这两个就可以了,这些都是 spring-core 的能力,简单来讲 Spring 在运行时获取数据都是从这些来源查找的,不管你是在 application.properties 还是环境变量的都是从这些来源进行查找的。换句话来讲,spring-cloud-config 也是这么实现的,你可以很清楚的看到这些配置文件的可以来源于本地文件读取出来的,也可以是通过网络来的( git 、svn )都可以只要能读取出来然后往 PropertySource 里塞,你程序就可以读取到了,原理就是这么简单。简单的代码只需要两行
|
24
lzrainchen 2023-07-28 19:44:50 +08:00 2
ConfigurableEnvironment environment = applicationContext.getEnvironment();
MutablePropertySources propertySources = environment.getPropertySources(); 然后往 propertySources 里塞你的 key value 配置,如果配置有变动再放一遍就行了 实时变化的,所有的功能都是搭建再这些东西之上的 |
25
kerb15 2023-07-28 21:07:05 +08:00
一直想知道 nacos 和 apollo 哪个资源占用高一点
|
26
XuHuan1025 2023-07-28 21:59:41 +08:00
@tgich Refreshscope
|
27
wellerman 2023-07-29 00:16:41 +08:00
nacos 推荐内存最低都 4G 了,还要多启个服务。apollo 通过 ConfigFactory 可以自定义配置,如读取数据库中的配置信息。
|
28
jdOY 2023-07-29 01:27:53 +08:00
拿 redis 存,代码自己封装下,要用配置的时候读取的顺序 redis>配置文件>硬编码
|
29
james122333 2023-07-30 01:16:09 +08:00 via Android
不要用 spring 自己写 整天 api 呼叫来呼叫去服务太多看起来有点傻
最简单就是挂载一个网路硬盘 侦测档案变化读入即可 可以用 Java watchservice |
30
james122333 2023-07-30 01:20:49 +08:00 via Android
这么做的好处是本机都可以检查
手刻党才是王道 |
34
20g 2023-08-03 13:56:05 +08:00
|