微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring Cloud Configuration Client不刷新属性

如何解决Spring Cloud Configuration Client不刷新属性

我有一个配置服务器,并且一个Spring Boot 2.3.1应用程序连接到服务器,以加载适当配置文件的配置属性

配置服务器使用git来获取每个应用程序和配置文件配置文件

这正常工作,当Spring Boot应用程序启动时,它会从配置服务器加载属性的正确值。

当我更新配置文件中的值并将其推送到git,然后在Spring Boot应用程序的Post/actuator/refresh端点上执行操作时,我看到返回了带有属性名称的json我更新了我所期望的。

问题在于,此后实际上并未更新属性。它们仍然具有旧的价值。

例如:

@Service
//@RefreshScope
public class WhitelistService {
  private static final Logger log = LoggerFactory.getLogger(WhitelistService.class);

  private final WhitelistRepository whitelistRepository;
  private final Boolean isWhitelistEnabled;
  private final Integer identifier;

  @Autowired
  public WhitelistService(WhitelistRepository whitelistRepository,@Value("${app.whitelist.isEnabled:true}") Boolean isWhitelistEnabled,@Value("${app.whitelist.identifier:-1}") Integer identifier) {
    super();
    this.whitelistRepository = whitelistRepository;
    this.isWhitelistEnabled = isWhitelistEnabled;
    this.identifier = identifier;
  }

  public boolean processBasedOnWhitelist(Long id) {
    if (!isWhitelistEnabled)
        return true;
    else if (identifier <= -1)
        return isInWhitelist(id);
    else
        return isInWhitelistWithIdentifier(id,identifier);
  }

 }

如果如上所述@RefreshScope被注释掉了,我在适当的属性文件中更新了app.whitelist.isEnabled,并将其推送到配置文件并执行了actuator/refresh,那么{{1} }保留旧值。

即使我对值字段使用app.whitelist.isEnabled还是在声明期间仅用setter注释字段本身,这都是正确的。

如果启用@Value,该值将按预期更新。

但是,上一次我在另一个项目中使用Configuration Server和Spring Boot作为客户端时,情况并非如此(除非在Spring Boot 2.3.1中进行了更改)。它过去经常立即进行更新,而无需使用@RefreshScope

我错过了什么吗?我想避免向每个具有属性值引用的Bean添加一个注释。没什么大不了的,但是似乎没有必要并且容易出错。

解决方法

在Spring Cloud Bus文档中:https://cloud.spring.io/spring-cloud-static/spring-cloud-bus/2.1.0.RELEASE/single/spring-cloud-bus.html#_bus_refresh_endpoint

/ actuator / bus-refresh端点清除RefreshScope缓存并重新绑定@ConfigurationProperties。有关更多信息,请参见刷新作用域文档。

因此,您可以使用@RefreshScope注释您的bean,或者使用@ConfigurationProperties注释。由于您的bean没有使用@ConfigurationProperties进行注释,因此必须使用@RefreshScope注释才能刷新它。

可能在您的其他项目中,您的bean将使用@ConfigurationProperties注释

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。