Я использую 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.
Вы проверили 'EnvironmnentPostProcessor'? –
Привет @ StephaneNicoll, с EnvironmnentPostProcessor, я не могу понять, как сканировать загруженные свойства. 'environment.getPropertySources(). get (" applicationConfigurationProperties ")' не позволяет мне перебирать свойства, я могу только запрашивать свойства по ключу. Существует 'getSource()', который возвращает Object (это фактически ArrayList) со свойствами. Ему понадобится бросок, который кажется взломанным. Кроме того, я не мог найти базовый объект ConfigurableEnvironment, который содержит свойства, загруженные из ConfigServer, только application.properties в пути к классам. Дальнейшая помощь приветствуется. –
Проверьте этот ответ http://stackoverflow.com/a/41463684/613628 –