gpt4 book ai didi

java - 在 ConditionalOnProperty 注释中使用主机名

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:46:59 30 4
gpt4 key购买 nike

我们有一个执行状态检查的@Scheduled 进程。但由于它在一组服务器上运行并为每个服务器提供相同的信息,我们得到了 5 条冗余消息。

为了解决这个问题,我发现了 @ConditionalOnProperty,它在我的开发箱上运行良好,我的主机名被硬编码为 havingValue 属性并设置了一个 statusHost application-dev.yml 中的 属性。这似乎是一个很好的设置,因为它在它们匹配时运行,而在它们不匹配时不运行。还有一个优点是,如果 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,尽管我喜欢这种解决方案。

最佳答案

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

关于java - 在 ConditionalOnProperty 注释中使用主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51655854/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com