Любой способ разбить конфигурацию Spring Boot на несколько файлов свойств без указания переменной среды / системного свойства - PullRequest
1 голос
/ 05 марта 2020

Впервые в Spring Boot здесь, однако, давний пользователь Spring Framework.

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

Я уже видел этот SO-ответ : возможность указать список имен файлов конфигурации в spring.config.name (который, кстати, не упоминается в справочной документации по загрузке) , поправьте меня, если я ошибаюсь) решит мою проблему отлично, однако это свойство конфигурации может быть указано только через системные свойства или переменные окружения. Если я пытаюсь указать его внутри моего application.properties файла, он игнорируется. То же самое происходит для spring.config.additional-location. Я понимаю, что это происходит потому, что при чтении application.properties уже слишком поздно сказать Spring Boot искать другие имена внешних файлов конфигурации. Однако это не является правильным решением, потому что способ, которым я разделяю мою конфигурацию, должен быть «деталью реализации», о которой потребитель моего приложения не должен знать, поэтому я не ожидаю, что потребитель будет указывать внешний параметр, в противном случае мой приложение ломается из коробки.

Я думаю, что способ сделать это должен быть предоставлен. Возможно, какой-то механизм импорта для файлов .properties или возможность указывать spring.config.name даже в application.properties (допустимы некоторые известные и разумные ограничения).

Лучшее, что я могу узнать, это использовать @PropertySource, но это не относится к профилю: если вы не используете некрасивый вложенный класс hack , или вы не поместите spring.profiles.active переменную в имя ресурса (которая сломается, если несколько профилей были активирован), вы не получите выгоду от application.properties profile-speci c файлов.

Мне не удалось найти "официальный способ" сделать это, за исключением некоторых заявлений от Разработчики Spring Boot , которые говорят, что они скорее продвигают использование одного (возможно, гигантского ...) внешнего файла конфигурации. Похоже, что эта позиция не так популярна, судя по сообщениям о реакции на GitHub, и ИМХО, похоже, отсутствует базовая функция c. Я работал с несколькими файлами свойств в Spring Framework (используя конфигурацию XML) в течение многих лет, и я никогда не думал, что было бы лучше иметь только один огромный файл.

Если я правильно понял, в Boot 1 .x это было возможно каким-то образом с помощью атрибута location @ConfigurationProperties, который, однако, отсутствует в Boot 2.x.

Есть предложения?

1 Ответ

0 голосов
/ 05 марта 2020

Вы пробовали с Spring Profile?

Что вы можете сделать, это создать application-file1.properties/yml, application-file2.properties/yml и поместить его в конфигурационную папку, а затем добавить spring.profile.active=<your env profiles>,file1,file2. Это загрузит файлы.

Эта запись профиля может быть в bootstrap.yml или JVM args to application, в Manifest-<env>.yml в случае Pivotal Cloud Foun dry. Не уверен в AWS и другом облачном провайдере.

Надеюсь, это поможет.

...