Впервые в 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.
Есть предложения?