2017-01-04 7 views
1

Я использую Spring Cloud Config в моем приложении Spring-Boot, и мне нужно написать какой-то пользовательский код для обработки свойств, которые нужно прочитать из моего корпоративного хранилища паролей, когда свойство помечено как таковое. Я знаю, что весеннее облако поддерживает Hashicorp Vault, но это не тот случай.Пользовательский загрузчик свойств с Spring Cloud Config

Я не хочу, чтобы жестко кодировать специфические свойства, которые будут извлечены из другого источника, например, я бы файл свойств для применения 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 из корпоративного хранилища паролей. Все остальные свойства будут по-прежнему возвращаться как есть - из значений, загружаемых стандартным клиентом конфигурации весеннего облака.

Я хотел бы сделать это, используя только аннотированный код, без конфигурации XML.

+0

Вы проверили 'EnvironmnentPostProcessor'? –

+0

Привет @ StephaneNicoll, с EnvironmnentPostProcessor, я не могу понять, как сканировать загруженные свойства. 'environment.getPropertySources(). get (" applicationConfigurationProperties ")' не позволяет мне перебирать свойства, я могу только запрашивать свойства по ключу. Существует 'getSource()', который возвращает Object (это фактически ArrayList) со свойствами. Ему понадобится бросок, который кажется взломанным. Кроме того, я не мог найти базовый объект ConfigurableEnvironment, который содержит свойства, загруженные из ConfigServer, только application.properties в пути к классам. Дальнейшая помощь приветствуется. –

+0

Проверьте этот ответ http://stackoverflow.com/a/41463684/613628 –

ответ

0

Вы можете реализовать свои собственные PropertySourceLocator и добавить запись в spring.factories в каталог META-INF.

#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

 Смежные вопросы

  • Нет связанных вопросов^_^