我们有一个@Scheduled
进程进行状态检查。但是,由于它运行在服务器阵列上,并且为每台服务器提供相同的信息,因此我们将获得5条冗余消息。
要解决此问题,我发现@ConditionalOnProperty
在我的开发箱中非常有效,其主机名硬编码为havingValue
属性,并在{{1 }}。这似乎是一个不错的设置,因为它在匹配时运行,而在不匹配时不运行。还有一个优点是,如果yml不具有该属性,则它不会在该环境的任何服务器上运行。
所以在代码中看起来像这样:
statusHost
还有yml:
application-dev.yml
不幸的是,当我去整理东西并放入正确的东西时,我意识到@Component
@ConditionOnProperty(prefix="status.", value="host", havingValue="my-dev-box")
public class StatusChecker {}
需要一个常量,而且我当然是在动态地找到服务器的主机名。
status:
host: my-dev-box
所以我的问题是,是否有人对此有解决方法?尽管我喜欢该解决方案,但不必使用havingValue
。
答案 0 :(得分:1)
我认为您可以使用@Conditional with a custom Condition。或者,在@Scheduled方法的开头,您可以有一个if语句,用于根据所寻找的值检查主机名(例如,使用InetAddress.getLocalHost()。getHostName())。