首页 > 解决方案 > 将 @RefreshScope 设为默认值

问题描述

如果我将 bean 注释为 @RefreshScope,我可以在其配置更改后获取它的新实例(例如,通过调用 触发刷新/refresh)。

但这正是我想要的每个 bean:为什么我要更改配置文件,然后期望配置对应用程序的某些部分立即生效,而对某些部分仅在重新启动后生效?

所以问题是是否可以将其应用为默认范围?

同样在一个典型的 Spring Boot 应用程序中,很多都是自动配置的(例如数据源),并且没有默认范围,我必须自己构建 bean 并正确注释它们。(编辑:@ConfigurationProperties 会自动刷新,并且由于 Spring Boot Datasource 自动配置是基于此的,因此确实会在没有 @RefreshScope 的情况下刷新)

我在这里想念什么?

标签: spring-cloud

解决方案


更改配置后,带有注释的 bean@RefreshScope不会自动刷新。只有在缓存条目失效后才会刷新。

从文档

刷新作用域 bean 是在使用它们时(即,当调用方法时)初始化的惰性代理,作用域充当初始化值的缓存。要强制 bean 在下一个方法调用时重新初始化,您只需使其缓存条目无效。

使缓存无效的一种方法是使用/refresh端点。请注意,刷新范围的 bean 可能会导致意外行为,请参阅上面提到的文档以了解为什么这不是默认行为。


推荐阅读