Настройка активного профиля и расположения конфигурации из командной строки в spring загрузке
У меня есть приложение загрузки spring.
У меня три профиля в моем приложении → разработка, постановка и производство. Итак, у меня есть 3 файла
- приложения development.yml
- приложения staging.yml
- приложения production.yml
My application.yml находится внутри src/main/resources
. Я установил активный профиль в application.yml как:
spring:
profiles.active: development
Другие 3 конфигурационных файла, специфичные для профиля, присутствуют в папке C:\config
.
Я использую плагин gradle для eclipse. Когда я пытаюсь выполнить " bootRun", я устанавливаю аргументы командной строки в моей конфигурации gradle в eclipse как
-Dspring.profiles.active=staging -Dspring.config.location=C:\Config
Однако свойство командной строки не получает отражения, и мой активный профиль всегда устанавливается как разработка (это тот, который я упомянул в файле applications.yml). Кроме того, папка C:\Config не ищет файлы конфигурации, специфичные для профиля.
Я думаю, что здесь что-то не хватает. Я пытался понять это за последние 2 дня. Но не повезло. Я бы очень признателен за любую помощь.
Ответы
Ответ 1
Мне пришлось добавить это:
bootRun {
String activeProfile = System.properties['spring.profiles.active']
String confLoc = System.properties['spring.config.location']
systemProperty "spring.profiles.active", activeProfile
systemProperty "spring.config.location", "file:$confLoc"
}
И теперь bootRun собирает настройки профиля и конфигурации.
Большое спасибо @jst за указатель.
Ответ 2
Существует два разных способа добавления/переопределения свойств spring в командной строке.
Вариант 1: Свойства системы Java (аргументы VM)
Важно, что параметры -D перед вашим application.jar
в противном случае они не распознаются.
java -jar -Dspring.profiles.active=prod application.jar
Вариант 2: Программные аргументы
java -jar application.jar --spring.profiles.active=prod --spring.config.location=c:\config
Ответ 3
-Dspring.profiles.active=staging -Dspring.config.location=C:\Config
неверно.
должен быть:
--spring.profiles.active=staging --spring.config.location=C:\Config
Ответ 4
вы можете использовать следующую командную строку:
java -jar -Dspring.profiles.active=[yourProfileName] target/[yourJar].jar
Ответ 5
Есть другой способ, установив переменную ОС, SPRING_PROFILES_ACTIVE.
например:
SPRING_PROFILES_ACTIVE=dev gradle clean bootRun
Справка: Как установить активные профили Spring
Ответ 6
При настройке профиля через плагин Maven вы должны сделать это через run.jvmArguments
mvn spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=production"
С возможностью отладки:
mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -Dspring.profiles.active=jpa"
Я видел эту поездку много людей... надеюсь, что она помогает
Ответ 7
Я думаю, что ваша проблема, скорее всего, связана с вашим spring.config.location, не заканчивая путь с помощью "/".
Цитировать документы
Если spring.config.location содержит каталоги (в отличие от файлов), они должны заканчиваться на/(и будут добавлены с именами, сгенерированными из spring.config.name перед загрузкой).
http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-application-property-files
Ответ 8
Михаил Инь ответ правильный, но, похоже, требуется лучшее объяснение!
Многие из вас упоминали, что -D
- это правильный способ задания параметров JVM, и вы абсолютно правы. Но Майкл также прав, как упоминалось в документации по Spring Boot Profiles.
В документации неясно, что это за параметр: --spring.profiles.active
не является стандартным параметром JVM, поэтому, если вы хотите использовать его в своей среде IDE, заполните правильные поля (то есть аргументы программы)
Ответ 9
Моя лучшая практика состоит в том, чтобы определить это как аргумент виртуальной машины "-D". Обратите внимание на различия между пружинными ботинками 1.x и 2.x.
Профили для включения могут быть указаны в командной строке:
Spring-Boot 2.x
-Dspring-boot.run.profiles=local
Spring-Boot 1.x
-Dspring.profiles.active=local
Пример использования с Maven:
Spring-Boot 2.x
mvn spring-boot:run -Dspring-boot.run.profiles=local
Spring-Boot 1.x
mvn spring-boot:run -Dspring.profiles.active=local
Обязательно разделяйте их запятой для нескольких профилей:
mvn spring-boot:run -Dspring.profiles.active=local,foo,bar
mvn spring-boot:run -Dspring-boot.run.profiles=local,foo,bar