【发布时间】:2018-08-02 14:16:07
【问题描述】:
我们有一个进行状态检查的@Scheduled 进程。但由于它在一组服务器上运行并为每个服务器提供相同的信息,因此我们会收到 5 条冗余消息。
为了解决这个问题,我发现@ConditionalOnProperty 在我的开发盒上运行良好,我的主机名硬编码为havingValue 属性并在application-dev.yml 中设置statusHost 属性。这似乎是一个很好的设置,因为它在它们匹配时运行,而在它们不匹配时不运行。还有一个好处是,如果 yml 没有该属性,它就不会在该环境的任何服务器上运行。
所以它在代码中看起来像这样:
@Component
@ConditionOnProperty(prefix="status.", value="host", havingValue="my-dev-box")
public class StatusChecker {}
还有 yml:
status:
host: my-dev-box
不幸的是,当我去清理并放入正确的东西时,我意识到havingValue 需要一个常量,当然,我正在动态查找服务器的主机名。
@ConditionOnProperty(prefix="status.", value="host", havingValue=System.getProperty("hostName") // property set elsewhere
所以我的问题是是否有人对此有解决方法?它不必使用@ConditionalOnProperty,尽管我喜欢那个解决方案。
【问题讨论】: