Spring cloud 将@RefreshScope设为默认值
如果我将bean注释为@RefreshScope,我可以在其配置更改后获得它的一个新实例(例如,通过调用Spring cloud 将@RefreshScope设为默认值,spring-cloud,Spring Cloud,如果我将bean注释为@RefreshScope,我可以在其配置更改后获得它的一个新实例(例如,通过调用/refresh触发刷新) 但这正是我对每个bean所希望的:为什么我要更改配置文件,然后期望配置立即对应用程序的某个部分生效,并且仅在重新启动后对某个部分生效 所以问题是是否可以将其作为默认范围应用 另外,在一个典型的Spring引导应用程序中,很多都是自动配置的(例如datasource),如果没有默认的作用域,我必须自己构建bean并正确地注释它们。(编辑:@ConfigurationP
/refresh
触发刷新)
但这正是我对每个bean所希望的:为什么我要更改配置文件,然后期望配置立即对应用程序的某个部分生效,并且仅在重新启动后对某个部分生效
所以问题是是否可以将其作为默认范围应用
另外,在一个典型的Spring引导应用程序中,很多都是自动配置的(例如datasource),如果没有默认的作用域,我必须自己构建bean并正确地注释它们。(编辑:@ConfigurationProperties会自动刷新,而且由于Spring Boot数据源自动配置基于此,因此在没有@RefreshScope的情况下确实会刷新)
这里缺少什么?在配置更改后,用
@RefreshScope
注释的bean不会自动刷新。只有在缓存项无效后,才会刷新它
:
刷新作用域bean是惰性代理,在使用它们时(即调用方法时)进行初始化,作用域充当初始化值的缓存。要强制bean在下一次方法调用时重新初始化,只需使其缓存项无效
使缓存无效的一种方法是使用/refresh
端点。
值得注意的是,刷新范围的bean可能会导致意外行为,请参阅上述文档以了解为什么这不是默认行为。并提供了所有答案
调用@ConfigurationProperties
时,会自动刷新/refresh
,因此使用这些属性的bean会为其他属性获取新值,而@Value
则有@RefreshScope
我认为将
@RefreshScope
设为默认值是不可能的。是的,我正在触发/refresh
端点。我已经编辑了我的问题。我读了文档的那一部分,我当然没有正确地阅读()之前的段落,它没有回答是否可以作为默认范围应用的问题。它不能作为默认作用域应用,但您可以通过使用BeanFactoryPostProcessor.postProcessBeanFactory显式设置刷新作用域,使所有bean都成为刷新作用域。您是对的。我编辑了答案。