Общие свойства сервера Spring Cloud Config в разных приложениях
В настоящее время у меня есть ряд развертываемых приложений, которые работают распределенным образом для решения бизнес-задач. В настоящее время мы используем несколько файлов конфигурации свойств, чтобы обеспечить изменение конфигурации для каждой среды на основе системной переменной среды. Все эти развертываемые приложения имеют общую конфигурацию для базы данных и обмена сообщениями. В настоящее время это достигается путем выбора файлов свойств из пути к классам и предоставления обоим развернутым приложениям общего jar-файла для каждого соединения (db, jms), содержащего файлы свойств.
Я хочу начать использовать Spring Config Server для экстернализации этой конфигурации, если это возможно. У меня есть вопрос о том, как поделиться этим общим конфигом.
В настоящее время это выглядит примерно так:
Web1
- база данных
- Джмс
Messaging1
- база данных
- Джмс
В этой ситуации оба развернутых приложения используют одни и те же соединения, и эти соединения изменяются в зависимости от среды (lab, prf, prd и т. Д.). Как я могу добиться того же с помощью Spring Configuration Server, где у меня есть конфигурация приложения для каждого развертываемого приложения?
Application.yml
Web1.yml
Web1-dev.yml
Messaging1.yml
Messaging1-dev.yml
Если свойство среды изменилось для среды, мне нужно было бы внести изменения в каждую конфигурацию развертываемого приложения, а не делать это только один раз.
Есть ли сейчас способ достичь этого? Я просто упускаю простой момент?
5 ответов
Я нашел рабочее решение здесь https://cloud.spring.io/spring-cloud-config/single/spring-cloud-config.html, параграф "2.1.5 Совместное использование конфигурации со всеми приложениями". Это говорит:
В репозиториях на основе файлов (т. Е. Git, svn и native) ресурсы с именами файлов в приложении * совместно используются всеми клиентскими приложениями (например, application.properties, application.yml, application-*. Properties и т. Д.). Вы можете использовать ресурсы с этими именами файлов, чтобы настроить глобальные значения по умолчанию и переопределить их при необходимости для файлов конкретного приложения.
Вы должны создать application.properties или application.yml на верхнем уровне хранилища конфигурации (если оно основано на git или svn). Не забудьте зафиксировать изменения.
Вот как я сконфигурировал свою установку.
1 Все общие свойства для всех служб и сред будутroot->application.properties files
2 Все общие свойства во всех средах, относящихся к услуге, будутroot->service-X.properties files
3. Точно так же, чтобы иметь общие свойства в конкретной среде, используйтеenv->application.properties
файл
server:
port: 8888
spring:
cloud:
config:
server:
git:
uri:[git repo]
search-paths: /,/{profile}/
-
application.properties/application.yml
будет использоваться всеми приложениями. -
application-DEV.properties/application-DEV.yml
будет использоваться всеми приложениями среды. Вы можете заменитьDEV
с любогоspring
профиль. -
{applicationName}.properties/{applicationName}.yml
будет использоваться в приложении для предоставления.
Наконец-то нашел решение. Это похоронено в проблемах в github...
https://github.com/spring-cloud/spring-cloud-config/issues/32
Работало, понравилось, описано. Я только заметил, что вам нужно поместить файлы в папку / config, чтобы это работало. Если вы поместите его в корень, файл не будет использоваться самим сервером конфигурации и не будет включен в запросы конфигурации.
Для людей, использующих подход, отличный от git, вот файл application.properties моего приложения облачной конфигурации.
server.port=8762
spring.application.name=cloud-config
spring.profiles.active=native
spring.cloud.config.server.native.searchLocations=file:./app-
config,classpath:/app-config
я создалapplication.properties
в папке app-config в разделе моих ресурсов. Он также работает с профилями. пример: приложение-prod.properties