在ConditionalOnProperty批注中使用主机名

时间:2018-08-02 14:16:07

标签: java spring

我们有一个@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

1 个答案:

答案 0 :(得分:1)

我认为您可以使用@Conditional with a custom Condition。或者,在@Scheduled方法的开头,您可以有一个if语句,用于根据所寻找的值检查主机名(例如,使用InetAddress.getLocalHost()。getHostName())。