2017-01-04 9 views
1

私はSpringBlockアプリケーションをSpringBlockアプリケーションで使用しています。プロパティにフラグが立てられている場合、企業のパスワードボールトから読み込むプロパティを処理するカスタムコードを記述する必要があります。私は春のクラウドがHashicorp Vaultをサポートしていることを知っていますが、その場合はそうではありません。私は別のソースから取得するためのハードコード固有の特性のためにしたくないSpring Cloud Configを使用したカスタムプロパティローダー

、例えば、私は、プロパティに値をプロファイルdevとアプリケーションapp1用のファイルなければなりません:

spring.datasource.url=jdbc:mysql://localhost/test 
spring.datasource.username=dbuser 
spring.datasource.password=dbpass 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 

たがために私が持っているだろうなprodなどいくつかの他のプロファイル、:

spring.datasource.url=jdbc:mysql://localhost/test 
spring.datasource.username=prod-user 
spring.datasource.password=[[vault]] 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 

それが返された値がに等しい見つけるたびだから私はロードされたプロパティを傍受するためにカスタムプロパティボールトを必要とします(または他のタイプのフラグ)を使用し、代わりに企業のボールトからクエリを実行します。この場合、私のカスタムプロパティローダーは企業のパスワードボールトからプロパティspring.datasource.passwordの値を見つけるでしょう。他のすべてのプロパティは、標準のSpringクラウドコンフィグレーションクライアントによってロードされた値からそのまま返されます。

注釈付きコードのみを使用し、XML設定は使用しないでください。

+0

あなたは 'EnvironmnentPostProcessor'を確認しましたか? –

+0

こんにちはStephaneNic​​oll、EnvironmnentPostProcessorで、私は読み込まれたプロパティをスキャンする方法を見つけることができません。 'environment.getPropertySources()。get(" applicationConfigurationProperties ")'はプロパティを反復することはできません。プロパティを持つObject(実際はArrayList)を返す 'getSource()'があります。それはハッキーに思われるキャストが必要です。さらに、クラスパス内のapplication.propertiesのみがConfigServerからロードされたプロパティを保持するConfigurableEnvironmentの基本オブジェクトを見つけることができませんでした。さらなる助けに感謝します。 –

+0

この回答を確認http://stackoverflow.com/a/41463684/613628 –

答えて

0

独自のPropertySourceLocatorを実装し、ディレクトリMETA-INFの spring.factoriesにエントリを追加できます。

#spring.factories 

org.springframework.cloud.bootstrap.BootstrapConfiguration=/ 
foo.bar.MyPropertySourceLocator 

次に、春の通常のプロパティのように、企業のパスワード保管庫のキーを参照できます。 HasiCorpによって

spring.datasource.url=jdbc:mysql://localhost/test 
spring.datasource.username=prod-user 
spring.datasource.password=${lodaded.password.from.corporate.vault} 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 

実装:VaultPropertySourceLocatorSupport

関連する問題