2015-01-13 3 views
6

Springブートのプロジェクトでは、application.propertiesを使用しますが、外部設定に基づいてこれらのプロパティのいくつか(ロギングレベルのポート番号など)を設定する必要があります。 APIを介して設定にアクセスするため、実行時にのみ認識されます。実行時のSpring/Springブートプロパティの設定/オーバーライド

実行時に(たとえばBeanを使用して)いくつかのSpringプロパティをオーバーライドまたは設定する方法はありますか?そうなら、どのように達成できますか?

+0

わかりません。あなたの環境には、さまざまな種類のデータソースを使用することができます。 docs:http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config?を読んだことがありますか?それはなぜ機能しないのですか? –

答えて

1

システムプロパティを使用して変数を渡すことはできますか? PropertyPlaceholderConfigurerを設定した場合は、システムプロパティとファイルプロパティの優先順位を設定できます。例えば

、のようなもの:あなたは同じ変数を上書きするシステム変数を設定するので、もし、

@Bean public PropertyPlaceholderConfigurer placeHolderConfigurer() { 
    PropertyPlaceholderConfigurer props = new PropertyPlaceholderConfigurer() 
    props.setSystemPropertiesMode(PropertyPlaceholderConfigurer.SYSTEM_PROPERTIES_MODE_OVERRIDE) 
    props.setLocations(new 
PathMatchingResourcePatternResolver().getResources("classpath:/**.properties")); 
    props 
} 

上記は、あなたの.propertiesファイルをロードするだろうが、我々は最初のシステム変数であることを優先順位を設定するには設定で。

はまた、the docsを見て、春にはお使いの環境で検索順序を定義するお勧めします。 既存の設定が「systemPropertiesMode」および/または「systemPropertiesModeNameを利用し

[ときPropertyPlaceholderConfigurerはまだ使用に適しています] "プロパティ。 は、これらの設定を使用しないようにして、コンテナの環境を通じて ソースの検索順序を設定することをお勧めします。しかし、 ファンクションの正確な保持は、 PropertyPlaceholderConfigurerを続けることによって維持することができます。

うまくいけば、必要なものを整理してください。

+1

私は、Spring Bootアプリケーション(既に提供されています)で 'PropertyPlaceholderConfigurer'を使用することはお勧めしません。 –

6

あなただけの説明の目的のためにSpring Cloud Config

でこれを行うことができ、ここでは、実行時に動的プロパティのオーバーライドを参照するには、比較的簡単な方法です:

まず、あなたのBeanが変更を拾うことができるようにするためにプロパティは、あなたは、あなたの春のブートアプリへのGradle

用などの春の雲の依存関係を追加します

@RefreshScope 

でそれに注釈を付ける必要があります

compile group: 'org.springframework.cloud', name: 'spring-cloud-starter', version: '1.1.1.RELEASE' 

(NBはまた、春のブートアクチュエータ依存性を必要とする。)

アプリが動作しているあなたは財産を持っている場合、あなたは私の「例えば

http://localhost:8080/env 

などであなたの現在の設定を表示することができます。プロパティーをapplication.propertiesに表示すると、次のように表示されます。

"applicationConfig: [classpath:/application.properties]": { 
    "my.property": "value1", 
    etc 

値を変更するには、次のようにします。プロパティ=値2再度アプリケーション/ x-www-form-urlencodedで

例えば

curl -X POST http://localhost:8080 -d my.property=value2 

GET/ENVとして/ envをすると、新しい値が "マネージャ" セクションの下に表示されます表示されます

変更されたプロパティを適用するには、空のPOSTを実行して/ refreshを実行します。今度はあなたのbeanは新しい値を持っています。

+0

システムのプロパティをsringするのにうまくいきますか? – gstackoverflow

関連する問題