Как получить доступ к файлу application- {profile} .properties на основе активного профиля - PullRequest
3 голосов
/ 04 июля 2019

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

@Component
@PropertySources({
        @PropertySource(value = "file:${user.home}/file/path/application.properties", ignoreResourceNotFound = false) })
public class PropConfig implements InitializingBean {

Теперь я хочу добиться того же, используя активный профиль.Если активен профиль разработчика, мне нужно получить application-dev.properties, если активен профиль сцены, я хочу получить application-stage.properties и т. Д.

Я использую платформу Windows иJAVA 8 с Spring Boot 1.5.x

Я попытался установить активный профиль в файле application.properties.Но это не работает

spring.profiles.active=dev

Ответы [ 2 ]

7 голосов
/ 05 июля 2019

Решение для Spring Boot 1.5.X

Вы можете добавить папку в качестве настраиваемого расположения конфигурации, запустив приложение со следующим аргументом JVM:

-Dspring.config.location=file:${user.home}/file/path/

С этим настроенным аргументом JVM все application-{profile}.properties файлы в этой папке будут автоматически разрешены.

(В качестве альтернативы, если вы предпочитаете использовать переменные среды вместо аргументов JVM, вы можете сделать то же самое, установивПеременная среды SPRING_CONFIG_LOCATION, например, с помощью следующей команды в терминале Linux: export SPRING_CONFIG_LOCATION=file:${user.home}/file/path/)

Теперь, если у вас есть файл application-dev.properties в папке пользовательских настроек, этого должно быть достаточно для активации профиля вфайл по умолчанию application.properties, добавив:

spring.profiles.active=dev

Наконец, аннотация @PropertySources является избыточной, и вы можете удалить ее:

@Component
public class PropConfig implements InitializingBean {

Ссылка: https://docs.spring.io/spring-boot/docs/1.5.0.RELEASE/reference/html/boot-features-external-config.html


Решение для Spring Boot 2.X

Подход в основном такой же, как для Spring Boot 1.5.X, но с небольшой разницей.

В спринтеg Boot 2.X поведение аргумента spring.config.location немного отличается от предыдущих версий.Разница в том, что в Spring Boot 2.X аргумент spring.config.location переопределяет местоположения конфигурации по умолчанию:

Когда настраиваемые местоположения конфигурации настраиваются с помощью spring.config.location, они заменяют местоположения по умолчанию.(Источник: Spring Boot Documentation )

Поскольку установка этого аргумента в пользовательскую папку конфигурации приведет к переопределению местоположений по умолчанию (я предполагаю, что потеря файлов конфигурации в местоположениях конфигурации по умолчаниюне желаемое поведение), лучше использовать новый аргумент spring.config.additional-location, который не переопределяет, а только расширяет местоположения по умолчанию:

-Dspring.config.additional-location=file:${user.home}/file/path/

(В качестве альтернативы вы можете использовать переменную среды SPRING_CONFIG_ADDITIONAL-LOCATIONесли вы предпочитаете использовать переменные окружения вместо аргументов JVM)

Ссылка: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

0 голосов
/ 04 июля 2019

Можете ли вы попробовать установить активный профиль с помощью аргумента JVM, как показано ниже: -Dspring.profiles.active=dev

Если вы хотите ограничить использование определенного компонента в среде, аннотация @Profile("dev") может

Эта ссылка может вам помочь -> https://www.baeldung.com/spring-profiles

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...