spring-cloud - 将 @RefreshScope 设为默认值
问题描述
如果我将 bean 注释为 @RefreshScope,我可以在其配置更改后获取它的新实例(例如,通过调用 触发刷新/refresh
)。
但这正是我想要的每个 bean:为什么我要更改配置文件,然后期望配置对应用程序的某些部分立即生效,而对某些部分仅在重新启动后生效?
所以问题是是否可以将其应用为默认范围?
同样在一个典型的 Spring Boot 应用程序中,很多都是自动配置的(例如数据源),并且没有默认范围,我必须自己构建 bean 并正确注释它们。(编辑:@ConfigurationProperties 会自动刷新,并且由于 Spring Boot Datasource 自动配置是基于此的,因此确实会在没有 @RefreshScope 的情况下刷新)
我在这里想念什么?
解决方案
更改配置后,带有注释的 bean@RefreshScope
不会自动刷新。只有在缓存条目失效后才会刷新。
从文档:
刷新作用域 bean 是在使用它们时(即,当调用方法时)初始化的惰性代理,作用域充当初始化值的缓存。要强制 bean 在下一个方法调用时重新初始化,您只需使其缓存条目无效。
使缓存无效的一种方法是使用/refresh
端点。请注意,刷新范围的 bean 可能会导致意外行为,请参阅上面提到的文档以了解为什么这不是默认行为。
推荐阅读
- c# - Visual Studios UWP 将 DatePicker 保存到 XML 文件中
- php - php中while循环的返回值
- flutter - 如何使用--split-debug-info=/
/ - r - R 列作为行值
- tensorflow - 如何查看加载的 keras 模型的指标?
- c# - 将json文件反序列化为对象C#
- c# - Xamarin:动态构建网格
- typescript - 如何使用变量来推断打字稿中的对象
- python - 我已经为左右角色设置了动画,我怎么能在不同时闪烁的情况下为我的左右站立设置动画?
- python - Python OSError:[WinError 10022] 提供了无效参数 | fd, addr = self._accept()