スコット法:
我々は持っている@Scheduled
状態チェックを行うプロセスを。しかし、それはサーバーのアレイ上で動作し、それぞれに同じ情報を提供するので、我々は5冗長なメッセージを取得しています。
この問題を解決するには、私が見つかりました@ConditionalOnProperty
ためにハードコードされた私のホスト名と私のdevのボックスに素晴らしい作品どの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を。またはあなたの@Scheduledメソッドの開始時に、あなたが探している値に対してif文をそのチェックのホスト名(例のInetAddress.getLocalHost()を使用。GETHOSTNAME())可能性があります。