Общий файл свойств приложения для нескольких микросервисов - PullRequest
0 голосов
/ 03 февраля 2019

Я хочу использовать общий файл свойств приложения для нескольких микросервисов, который будет иметь некоторую общую конфигурацию, например, конфигурацию БД-источника и т. Д. Я использовал сервер конфигурации с сервером Eureka и прокси-сервером zull.

Проблема:

При использовании configServer нам необходимо предоставить spring.application.name = 'xyz', который, в свою очередь, найдет свойства xyz.properties для этой конфигурации микросервиса.

Таким же образомкогда мы регистрируем сервис с помощью zuul proxy, для настройки пути к сервису также требуется то же имя приложения, что и для zuul.routes.xyz.path = /iii/*.

Теперь я хочу, чтобы несколько сервисов имели общее свойствофайл (xyz.properties), но также необходимо зарегистрировать маршрут zuul, поэтому я должен указать разные имена для каждой службы.Если я предоставлю разные имена для каждой службы, они не смогут найти один и тот же файл свойств.

Я новичок в весенних загрузочных микро-службах.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Я хотел бы отметить, что предоставленное решение использует свойство "spring.config.client.name" на стороне клиента семантики для достижения сервера конфигурации поведения обслуживающих файлов свойствиз нескольких файлов, кроме application [-profile] . * и {appname} [- profile] . *

Однако , обратите внимание, чтодля простого случая и с учетом корневого каталога, сервер конфигурации предоставляет свойства из файлов, определенных в этом корневом каталоге или в папке с именем приложения, которым соответствуют файлы свойств под ним, т.е. * / {appname} / application[-profile]. ** или * / {appname} / {appname} [- profile]. **

Свойство среды " spring.config.client.name " указываетсервер конфигурации, с которым имена приложений совпадает с запрашивающим приложением.Это означает, что с учетом spring.config.client.name = a , b сервер конфигурации примет свойства обслуживания , определенные для приложения (с именем) а и б запрашивающему приложению!Это не то же самое, что я хочу, чтобы мои свойства обслуживались из file names a и b !Поэтому мы злоупотребляем семантикой свойств для управления обслуживанием нашего сервера конфигурации из имен файлов, которые мы бы хотели.

Однако из-за фактической семантики spring.config.client.name сервер конфигурации будет обслуживать все применимое от

  • / a [-profile]. *
  • / b [-profile]. *
  • / a / {применимые имена}
  • / b / {применимые имена}

предостережение в том, что мы достигаем того, что хотим только для корнякаталог и, более того, если у нас есть сервер конфигурации, который обслуживает несколько приложений Springboot, мы теряем возможность иметь все наши свойства в папке имени нашего приложения.

Еще хуже, , если существует другое приложение (или - внимание! - будет существовать в будущем) с тем же именем, что и у нашего желаемогоимена файлов свойств , сервер конфигурации начнет обслуживать наше приложение ALL конфигурация, определенная для этого другого приложения !!!Это может привести к неправильной и даже вредной конфигурации!

(повторяю, он будет обслуживать все в соответствии с / { other-app-name-that-i-случился-использовать-как-filename-and-defined-it-through-spring.config.client.name } / * !!!)

Так что будьте осторожны при использовании этого подхода!

Я выпустил запрос на выборку для spring-cloud-config-server 1.4.x , который поддерживает определение дополнительных имен файлов через свойство среды spring.cloud.config.server.searchNames , в том же самомсмысл, который можно сделать для отдельного приложения springboot, как определено в разделе документации Файлы свойств Externalized Configuration.Application документации, используя свойство среды spring.config.name .Я надеюсь, что они рассмотрят это в ближайшее время

0 голосов
/ 03 февраля 2019

spring.config.client.name поддерживает несколько имен, разделенных запятыми, для загрузки свойств конфигурации.

В этом случае сохраните общие свойства в свойствах common.yml и xyz вxyz.yml.Наконец, упомяните spring.cloud.config.name: xyz,common

spring:
  cloud:
    config:
      uri: http://localhost:8888
      name: xyz,common

Вывод:

Fetching config from server at : http://localhost:8888
Located environment: name=xyz,common, profiles=[default], label=null, version=91edcf96c6a88707bf39014a16ad5d301d6b4575, state=null
Located property source: CompositePropertySource {name='configService', propertySources=[MapPropertySource {name='configClient'}, MapPropertySource {name='https://github.com/BarathArivazhagan/config-server-repository/common.yml'}, MapPropertySource {name='https://github.com/BarathArivazhagan/config-server-repository/xyz.yml'}]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...