Spring Cloud Config - Чтение нескольких файлов свойств из Git - PullRequest
0 голосов
/ 16 апреля 2019

Я использую Spring Boot 2, у меня есть application.yml для каждого сервиса.Каждый application.yml определяет общие свойства, а также конкретные свойства для каждого профиля.Я хочу перейти к Spring Cloud Config.

Я бы хотел, чтобы каждый сервис считывал свойства из 4 файлов свойств, то есть для сервиса под названием «myService» с профилем «dev» я хочу иметь возможность читатьfrom:

  • config / myService / application-dev.yml (конкретный конфиг для этого сервиса и этого профиля)
  • config / myService / application.yml (специфический конфиг для этого сервиса нетнезависимо от того, какой профиль)
  • config / application-dev.yml (конкретная конфигурация для профиля dev независимо от того, какая служба)
  • config / application.yml (общая конфигурация независимо от того, какая служба, какаяпрофиль)

Я создал каталог конфигурации.Для каждой службы есть подкаталоги.

Однако из git при запуске myService извлекаются только 2 файла.Третий файл извлекается через EncryptablePropertySourceConverter.Отсутствует файл config / application.yml.См. Ниже журнал myService:

 10:27:42.535 [main] INFO  o.s.c.b.c.PropertySourceBootstrapConfiguration - Located property source: 
 10:54:20.449 [main] INFO  o.s.c.b.c.PropertySourceBootstrapConfiguration - Located property source: CompositePropertySource {name='configService', 
 propertySources=[MapPropertySource {name='configClient'}, 
 MapPropertySource {name='ssh://git@xxx:7999/qi/athena.git/config/myService/application-dev.yml'}, 
 MapPropertySource {name='ssh://git@xxx:7999/qi/athena.git/config/myService/application.yml'}]}
 ...
 10:54:27.141 [main] INFO  c.u.j.EncryptablePropertySourceConverter - Converting PropertySource applicationConfig: [file:./config/application-dev.yml] 
 [org.springframework.boot.env.OriginTrackedMapPropertySource] to EncryptableMapPropertySourceWrapper
 ...
 10:55:01.469 [main] DEBUG o.s.c.c.c.ConfigServicePropertySourceLocator - Environment myService has 2 property sources with 6 properties.
10:55:01.469 [main] INFO  o.s.c.b.c.PropertySourceBootstrapConfiguration - Located property source: CompositePropertySource {name='configService', 
propertySources=[MapPropertySource {name='configClient'}, 
MapPropertySource {name='ssh://git@xxx:7999/qi/athena.git/config/myService/application-dev.yml'}, 
MapPropertySource {name='ssh://git@xxx:7999/qi/athena.git/config/myService/application.yml'}

Служба конфигурации - application.yml:

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: ssh://git@xxx:7999/qi/athena.git
          clone-on-start: true
          search-paths: 'config/{application}'
          default-label: 'feature/ConfigServerDesign'

myService - bootstrap.yml

spring:
  application:
    name: myService
  cloud:
      config:
        uri: http://localhost:8888
        label: 'feature/ConfigServerDesign'

Два файла config / myService/application.yml и config / myService / application-dev читаются.

Также читается общий config / application.yml.https://cloud.spring.io/spring-cloud-config/multi/multi__spring_cloud_config_server.html#_sharing_configuration_with_all_applications Однако файл config / application.yml не читается.

Есть ли конфликт между config / application.yml и config / myService / application.yml?

Спасибоза вашу помощь.

1 Ответ

0 голосов
/ 16 мая 2019

Проблема заключалась в содержимом файлов, которые не были прочитаны. Если по ошибке есть свойство:

spring.profiles: some_profile

тогда файл application.yml не читается.

То же самое, если у вас есть, например:

spring.profiles: prod

в файле application-uat.yml.

Я думаю, это правильное поведение, чтобы игнорировать такие файлы, так как это несоответствие или конфликт. Однако в этом случае должно помочь сообщение об ошибке или предупреждение, а не игнорирование файла без вывода сообщений.

...