Поведение файлов двойной загрузки Spring Cloud Config

У меня есть установка, в которой я использую следующее:

  • Spring Boot 1.5.13 с версией Spring Cloud Edgware.S3
  • У меня есть Spring Cloud Config Server, и мои приложения Spring Boot являются его клиентами.
  • Каждое приложение содержит файл bootstrap.yml с uri сервера конфигурации и некоторыми другими свойствами.
  • Запуск контейнеров в Docker Swarm

В настоящее время я передаю секреты Swarm клиентам через специальный скрипт, который считывает файлы, помещенные в / run / secrets /, и создает файл /config/bootstrap.properties. В итоге это выглядит так:

spring.cloud.config.username=user
spring.cloud.config.password=password

Команда по умолчанию для моего образа Docker следующая:

java -Djava.security.egd=file:/dev/./urandom -jar /${appName}.jar --spring.cloud.bootstrap.location=file:/config/bootstrap.properties"

Отлично. Это работает без проблем. Приложение вроде бы гласит:

  • Внешний bootstrap.properties для чтения учетных данных сервера конфигурации
  • Путь к классам bootstrap.yml для чтения в остальных реквизитах клиента конфигурации
  • Выбирает и читает файл application-appName.yml на сервере конфигурации.
  • Затем читает связанный application.yml из пути к классам

Сейчас. Я перемещаю приложения на Spring Boot 2.0.3 с Finchley.RELEASE, и это ломается.

Что сейчас происходит:

  • Считывается внешний файл bootstrap.properties для получения учетных данных сервера конфигурации.
  • Путь к классам bootstrap.yml полностью ПРОПУСКАЕТСЯ (НЕОЖИДАННЫЙ!)
  • Выбирает и читает файл application-appName.yml на сервере конфигурации.
  • Затем читает связанный application.yml из пути к классам

Проблема в том, что свойства, которые были установлены во внутреннем bootstrap.yml, теперь отсутствуют для приложения, поэтому оно взрывается при запуске. Я смог воспроизвести его вне среды контейнера, сделав то же самое; укажите в приложении внешний bootstrap.properties. Если я скопирую свойства bootstrap.yml в bootstrap.properties, он будет работать нормально. Кроме того, если я не предоставлю файл внешних свойств, то внутренний bootstrap.yml сработает без проблем. Так что либо то, либо другое!

Я также попытался изменить местоположение начальной загрузки, чтобы включить местоположения по умолчанию, но безуспешно:

-- spring.cloud.bootstrap.location=file:/config/bootstrap.properties,classpath:,classpath:/config,file:,file:config/

Есть идеи, где искать дальше? Может быть, мне не хватает нового свойства spring.cloud.config? Или кто-нибудь может подтвердить, какое поведение является правильным? Предполагая, что они устранили потенциальную лазейку в Финчли, я могу просто положить этому конец и поискать другое решение. Если он «сломан» в Финчли, я думаю, нужно сообщить о проблеме?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
1
0
628
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что ж, еще несколько копаний показали, что похоже, что это новое поведение:

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide

The behavior of the spring.config.location configuration has been fixed; it previously added a location to the list of default ones, now it replaces the default locations. If you were relying on the way it was handled previously, you should now use spring.config.additional-location instead.

Это не выглядело специально для Spring Cloud, но мне было нечего терять. Изменение моей команды java для использования этого нового свойства помогло:

--spring.config.additional-location=file:/config/bootstrap.properties

Спасибо.

Другие вопросы по теме