Spring cloud 将@RefreshScope设为默认值

Spring cloud 将@RefreshScope设为默认值,spring-cloud,Spring Cloud,如果我将bean注释为@RefreshScope,我可以在其配置更改后获得它的一个新实例(例如,通过调用/refresh触发刷新) 但这正是我对每个bean所希望的:为什么我要更改配置文件,然后期望配置立即对应用程序的某个部分生效,并且仅在重新启动后对某个部分生效 所以问题是是否可以将其作为默认范围应用 另外,在一个典型的Spring引导应用程序中,很多都是自动配置的(例如datasource),如果没有默认的作用域,我必须自己构建bean并正确地注释它们。(编辑:@ConfigurationP

如果我将bean注释为@RefreshScope,我可以在其配置更改后获得它的一个新实例(例如,通过调用
/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都成为刷新作用域。您是对的。我编辑了答案。