У меня проблемы с пользовательским стартером Spring Boot.Как стартер может вызвать включение профиля и получить соответствующую конфигурацию с сервера конфигурации?
Возможно, мой вариант использования уникален, потому что я не нашел никакой полезной информации в Интернете.Я работаю в корпоративной среде, и этот стартер предназначен для использования моей командой, поэтому мы можем контролировать некоторые вещи (например, имена профилей), которые, возможно, не имеют смысла в мире открытого исходного кода.
Вот сценарий: у нас есть сервер Spring Cloud Config, работающий для обеспечения конфигурации.В рамках наших проектов Spring Boot мы стандартизировали определенные имена профилей, такие как «prod» и «nonprod», для управления конфигурацией в различных средах.Я пытаюсь создать стартер для обеспечения функциональности многократного использования.Например, допустим, я создаю стартер, который предоставляет интерфейс для устройства, которое выполняет за нас криптографическую работу.Этому стартеру потребуется IP-адрес устройства и различные другие конфигурации, которые отличаются между производственной и непроизводственной.
В репозитории конфигурации у меня будут файлы, такие как application.yml, application-nonprod.yml,application-nonprodEncryption.yml и т. д.
Моя цель состоит в том, чтобы пользовательский шифровальный пускатель автоматически включал профиль nonprodEncryption, когда этот пускатель включается в приложение.Таким образом, приложения, которые не нуждаются в шифровании, не загружают свойства, связанные с шифрованием.
Вот мои экспериментальные выводы:
В загрузочном приложении.yml, я могу поставить блок, такой как
spring.profiles: nonprod
spring:
profiles:
include:
- nonprodEncryption
, и это даст желаемый результат (т.е. файл application-nonprodEncryption.yml загружается с сервера конфигурации и используется), но это нежелательное решение, так каккаждое приложение, использующее мой пользовательский стартер, должно включать эту шаблонную конфигурацию.
Когда я перемещаю вышеупомянутую конфигурацию в bootstrap.yml стартера, это, похоже, не имеет никакого эффекта.
Когда я перемещаю указанную выше конфигурацию в стартовый файл application.yml, он, кажется, применяется (т. Е. Отображается в списке The following profiles are active:
), но это слишком поздно в жизненном цикле, чтобы вызватьсоответствующая конфигурация должна быть получена с сервера конфигурации.
Другие вопросы, которые я рассмотрел:
Почему бы просто не поставитьвсе настройки в главном конфигурационном файле профиля (например, application-nonprod.yml)?С точки зрения разделения задач и технического обслуживания, я хотел бы сохранить конфигурацию для отдельных пускателей изолированно друг от друга.Кроме того, некоторые данные конфигурации более чувствительны, чем другие данные конфигурации, поэтому мне не нравится идея раскрывать всю конфигурацию всем приложениям, поскольку многим приложениям не понадобятся некоторые из более чувствительных настроек.Да, они могут получить это, но зачем загружать его в свою память, если им это не нужно?
Почему бы просто не указать дополнительные профили при запуске приложения?Эти приложения будут работать на облачной платформе.Платформа будет указывать либо «prod», либо «nonprod» в качестве профиля, в зависимости от того, на каком уровне запущено приложение. Я хочу управлять этим на уровне платформы, а не на уровне приложения, поэтому мне нужен список профилей, представленных в приложении.запускаться одинаково для всех приложений (добавление, например, nonprodEncryption в список, приводит меня к той же ситуации, что и выше - все приложения будут иметь всю конфигурацию, поэтому я мог бы просто поместить все это в один файл).
В настоящее время мы используем Spring Boot 1.5.10.
Есть мысли о том, как добиться того, что я пытаюсь сделать?