web-dev-qa-db-ja.com

スプリングブートの使用中に動的プロパティを構成する方法は?

割り当てにはSpring Bootを使用する予定です。データベースに接続する典型的なサーバーアプリケーション。 Spring Configuration を使用してプロパティを外部化できることを知っています。 db接続の詳細。しかし、実行時に更新する必要がある他のdynamicプロパティもあります。例えばフリッパー/機能フラグ。アプリケーションの特定の機能を動的に制御する必要があります。 app.cool-feature.enable = trueのようなプロパティを想像してください。しばらくすると、同じ機能がapp.cool-feature.enable = false

実行時にそのような動的動作を取り込むことに関するベストプラクティスは何ですか?変更をトリガーする次のオプションを考えることができます...

  • 上記のプロパティを変更してJMSメッセージをサーバーインスタンスに送信する
  • サーバーインスタンスで公開されたAPIエンドポイントを呼び出します。 POST http:// myapp/admin/config/update {"config":{"app.cool-feature.enable":true}}

これを実装する独自のカスタムコードを作成できることはわかっていますが(3回目です)、動的プロパティの構成に関する標準的な方法/一般的な方法が知られていないのではないかと考えています。また、Apache ZooKeeper、coreos etcd、Netflix curatorなどの他のソリューションと連携でき、Springと緊密に統合できればすばらしいと思います。

考え?

18
eton dolittle

Springブートを使用している場合は、@ConfigurationProperties。プロパティにアクセスするには、Beanを提供する必要があります。したがって、プロパティの元の値はBeanの通常のプロパティであるため、実行中に変更できます。

あなたの例では:

@Component
@ConfigurationProperties
public class JmsProperties {

    private String url = "vm://localhost" (let's suppose you use ActiveMQ);

    public String getUrl()...
    public void setUrl(String value)...

}

次に、このBeanをJMSメッセージリスナーに挿入します。

もちろん、JMSとSpringブートを使用していて、自動構成を使用すると、すでにPropertiesクラスがあります...

8
Vince108

あなたの要件は、「Spring Cloud Config」の良いユースケースであり、すべての構成を一元的に配置できるだけでなく、動的に更新することもでき、次の瞬間から参照元のアプリで選択できます。この標準スプリング link を参照してください。

5
Avis

Togglzをご覧になるとよいでしょう: www.togglz.org

彼らのホームページから:

Togglzは、Java用の機能切り替えパターンの実装です。機能の切り替えは、継続的な展開と配信のコンテキストで非常に一般的なアジャイル開発プラクティスです。基本的な考え方は、作業中の各新機能にトグルを関連付けることです。これにより、個々のユーザーであっても、アプリケーションの実行時にこれらの機能を有効または無効にすることができます。

TogglzはSpringフレームワークにバインドされていませんが、サポートしています。

3
Riggs