我有一个配置服务器,一个Spring Boot2.3.1应用程序连接到该服务器,为正确的配置文件加载配置属性。
配置服务器使用git获取每个应用程序和配置文件的配置文件。
这工作正常,当Spring Boot应用程序启动时,它将从配置服务器加载属性的正确值。
当我在配置文件中更新一个值并将其推送到git中,然后对Spring Boot应用程序的post
endpoint执行/acturet/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);
}
}
如果@refrescope
被注释掉,并且我在适当的属性文件中更新app.whitelist.isenabled
并将其推送到配置文件中,然后执行acture/refresh
,那么app.whitelist.isenabled
将保持旧值。
即使我为value字段使用setter
或在声明字段时使用@value
对字段本身进行注释,也是如此。
如果启用@refreshScope
,则会按预期更新值。
但是,上次我使用配置服务器和Spring Boot作为客户机,在另一个项目中,情况并非如此(除非在Spring Boot 2.3.1中改变了这一点)。它可以立即更新,而不需要@refreshScope
。
我是不是漏掉了什么?我希望避免为我有属性值引用的每个Bean添加另一个注释。这不是什么大事,但似乎没有必要,而且容易出错。
在Spring云总线文档:https://Cloud.Spring.io/spring-cloud-static/spring-cloud-bus/2.1.0.release/single/spring-cloud-bus.html#_bus_refresh_endpoint
/acturet/bus-refreshendpoint清除RefreshScope缓存并重新绑定@ConfigurationProperties。有关更多信息,请参阅刷新范围文档。
因此,您可以使用@refreshScope对bean进行注释,也可以使用@ConfigurationProperties进行注释。由于bean没有使用@ConfigurationProperties注释,因此必须使用@RefreshScope注释来刷新它。
在您的其他项目中,您的bean可能会被@ConfigurationProperties注释
本文向大家介绍SpringCloud配置刷新原理解析,包括了SpringCloud配置刷新原理解析的使用技巧和注意事项,需要的朋友参考一下 我们知道在SpringCloud中,当配置变更时,我们通过访问http://xxxx/refresh,可以在不启动服务的情况下获取最新的配置,那么它是如何做到的呢,当我们更改数据库配置并刷新后,如何能获取最新的数据源对象呢?下面我们看SpringCloud如何
我有一个客户端,它监听配置服务器。配置服务器指向github。使用localhost时一切正常。然而,当我将应用程序部署到Kubernetes时,用于刷新属性的客户端endpoint无法正常工作。 endpoint(后):http://config-client.sbx.com/actuator/refresh 这将在Postman“[]”上返回一个空响应,响应代码为200 OK。我能够看到配置服
本文向大家介绍SpringCloud Bus如何实现配置刷新,包括了SpringCloud Bus如何实现配置刷新的使用技巧和注意事项,需要的朋友参考一下 要想实现配置刷新,首先得有项目基础结构 项目一: 注册中心 项目二: 配置中心 项目三: 客户端 先启动注册中心 然后启动配置中心 然后在不同端口启动客户端的多个实例,这些实例都是通过bootstrap.properties连接到配置中心后,加
我有一个SpringBoot应用程序,它使用配置服务器加载其属性。属性存在于src中。配置服务器项目的main/resources/config目录。 当我到达restfulendpoint时,属性初始加载良好,然后当我更改属性时,它仍然显示旧的属性值。如何在调用URL时调用刷新终结点?我是在配置服务还是你好服务上调用它?即使从日志看起来已经映射了它们,它仍然会抛出405错误 配置服务器 或者你好
我使用的是Spring2.0.3。配置客户端的数据库配置是通过配置服务器从git存储库中获取的。 我已经更改了数据库配置并推回到Git中。 你能帮我解决这个问题吗。
客户端配置项设置示例 lookoutConfig.setProperty(LookoutConfig.LOOKOUT_AGENT_HOST_ADDRESS,"127.0.0.1"); 客户端配置项说明 配置项 对应 SpringBoot 配置项 默认配置值 说明 lookout.enable com.alipay.sofa.lookout.enable true 功能开关,默认是 true。如