実行時にSpringコンフィグレーションサーバでいくつかのプロパティを追加したいのですが、すべてのクライアントアプリケーションで@Value
アノテーションを使用できるようにする必要があります。実行時にSpringコンフィグレーションサーバプロパティを追加する
私はこの値をスプリング設定サーバーで計算して環境に追加する予定なので、このプロパティはあらかじめ定義されていません。
これを達成するための最良の方法を理解していただけますか。
実行時にSpringコンフィグレーションサーバでいくつかのプロパティを追加したいのですが、すべてのクライアントアプリケーションで@Value
アノテーションを使用できるようにする必要があります。実行時にSpringコンフィグレーションサーバプロパティを追加する
私はこの値をスプリング設定サーバーで計算して環境に追加する予定なので、このプロパティはあらかじめ定義されていません。
これを達成するための最良の方法を理解していただけますか。
Springクラウド設定には、実行中のアプリケーションのプロパティとBeanをリフレッシュできる「RefreshScope」という名前の機能が含まれています。
春のクラウド設定について読んだ場合、gitリポジトリからのみプロパティをロードできるように見えますが、それは当てはまりません。
RefreshScopeを使用すると、外部のgitリポジトリまたはHTTPリクエストに接続する必要なく、ローカルファイルからプロパティをリロードすることができます。
このコンテンツをファイルbootstrap.properties
を作成します。
# false: spring cloud config will not try to connect to a git repository
spring.cloud.config.enabled=false
# let the location point to the file with the reloadable properties
reloadable-properties.location=file:/config/defaults/reloadable.properties
は、あなたが上で定義された場所にファイル
reloadable.properties
を作成します。 空のままにすることも、いくつかのプロパティを追加することもできます。このファイルでは、後で実行時にプロパティを変更または追加できます。
実行時に変更することができる性質を、使用しているすべてのBeanは、このような@RefreshScope
で注釈付けされなければならない
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
に依存関係を追加します。
@Bean
@RefreshScope
Controller controller() {
return new Controller();
}
は、クラス
を作成します。public class ReloadablePropertySourceLocator implements PropertySourceLocator
{
private final String location;
public ReloadablePropertySourceLocator(
@Value("${reloadable-properties.location}") String location) {
this.location = location;
}
/**
* must create a new instance of the property source on every call
*/
@Override
public PropertySource<?> locate(Environment environment) {
try {
return new ResourcePropertySource(location);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
そのクラスを使用してSpringにbootstrap the configurationを設定する。
あなたのリソースフォルダにMETA-INF/spring.factories
ファイルを作成します(または拡張):
org.springframework.cloud.bootstrap.BootstrapConfiguration=your.package.ReloadablePropertySourceLocator
このBeanはreloadable.properties
からプロパティを読み込みます。 Spring Cloud Configは、アプリケーションをリフレッシュするときにディスクからリロードします。
ランタイムを追加して、好きなようにreloadable.properties
を編集し、次にスプリングコンテキストを更新します。 あなたは/refresh
エンドポイントにPOSTリクエストを送信することにより、またはJavaでContextRefresher
を使用していることを行うことができます。
@Autowired
ContextRefresher contextRefresher;
...
contextRefresher.refresh();
リモートgitリポジトリからプロパティと並行して、それを使用することを選択した場合、これは、また、動作するはずです。
お返事ありがとうございました。外部化されたファイルにランタイムプロパティを追加でき、バネ設定サーバーが自動的にロードすることを提案していると思います。しかし、私はファイルに書き込むことなく達成することが可能ですか? environment.addPorperty(key、Value)のようなやり方で、すべての設定クライアントに利用できますか? –
@RefreshScopeでBeanを定義するのではなく、プロジェクトに対してグローバルに行うことはできますか –
この回答を見るhttp://stackoverflow.com/questions/37873433/spring-cloud-config-server-rabbitmq/37873783#37873783 –
[Spring Cloud Config Server + RabbitMQ]の可能な複製(http:// stackoverflow .com/questions/37873433/spring-cloud-config-server-rabbitmq) – Raz0rwire
いいえ別の質問 –