如何避免在应用程序中的多个bean上放置@RefreshScope

时间:2018-07-11 09:40:02

标签: java spring spring-boot spring-cloud

我们正在使用Spring Cloud外部化微服务(基于Spring Boot)的配置。

根据我对Spring Cloud的理解,要使Bean从 Config服务器加载刷新/更新的值,我们需要在 Spring Cloud Client 中做两件事:

  1. 在bean上添加@RefreshScope,以从属性文件中读取值 使用@Value
  2. 添加弹簧执行器以提供/刷新端点 刷新上下文。

场景: 我们有100多个使用@Value从属性文件读取值的类。 我必须标记所有使用@RefreshScope注释启用的bean刷新。

如何避免在所有这些类上添加@RefreshScope注释。 是否有任何捷径或Spring Cloud功能可以解决这种情况。

2 个答案:

答案 0 :(得分:1)

您可以将@Values封装到一个(或几个)@RefreshScoped的ConfigurationService bean中,然后将此服务自动连接到您的类中。这样,您只有少量的请求范围的Bean,并且您的服务可以保持单例状态。

答案 1 :(得分:0)

您可能想研究称为@ConfigurationProperties的Spring Boot功能。它旨在更好地组织几个外部配置选项。

根据this Github issue,它应在不使用@RefreshScope的情况下适用于春季云。

编辑(对评论的反应):也许您缺少@ConfigurationProperties的要点。使用此注释,您将不会在其他配置类中使用它。您将只有一个专门的类(或几个类)来阅读和提供属性。其他配置类将注入此配置持有人Bean。