Подтвердить что ты не робот

Настройка активного профиля и расположения конфигурации из командной строки в 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 дня. Но не повезло. Я бы очень признателен за любую помощь.

4b9b3361

Ответ 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

Ответ 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