2017-01-04 74 views
1

我在我的春季啓動應用程序中使用Spring雲配置,我需要編寫一些自定義代碼來處理屬性從我的公司密碼保險庫中讀取屬性被標記爲這樣。我知道春雲支持Hashicorp Vault,但這不是事實。自定義屬性加載器與春天雲配置

我不想硬編碼特定的屬性從不同的源檢索,例如,我想有一個屬性文件應用app1與輪廓dev與價值觀:

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 

所以我需要自定義屬性庫攔截加載的特性,只要它找到一個返回值等於[[vault]](或某種其他類型的標誌)以及來自公司庫的查詢。在這種情況下,我的自定義屬性加載器將從公司密碼保管庫中找到屬性spring.datasource.password的值。所有其他屬性仍將按照標準spring cloud config客戶端加載的值原樣返回。

我想這樣做只使用帶註釋的代碼,沒有XML配置。

+0

你檢查'EnvironmnentPostProcessor'? –

+0

Hi @ StephaneNic​​oll,EnvironmnentPostProcessor,我無法弄清楚如何掃描加載的屬性。 'environment.getPropertySources()。get(「applicationConfigurationProperties」)'不允許我遍歷屬性,我只能通過鍵來查詢屬性。有一個'getSource()'返回一個Object(實際上是ArrayList)的屬性。這將需要一個看起來很拙劣的角色。另外,我無法找到ConfigurableEnvironment的底層對象,該對象只保存來自ConfigServer的屬性,而不包含類路徑中的application.properties。更多的幫助表示讚賞。 –

+0

檢查這個答案http://stackoverflow.com/a/41463684/613628 –

回答

0

你可以實現你自己的PropertySourceLocator並在目錄META-INF中添加條目到 spring.factories。

#spring.factories 

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

然後,你可以參考公司密碼保險庫中的密鑰,像在春天的普通屬性。

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 

實現由HasiCorp:VaultPropertySourceLocatorSupport