Налаштування активного профілю та конфігурації розташування з командного рядка у весняному завантаженні


164

У мене є додаток для весняного завантаження.

У мене є три профілі в моєму застосуванні-> розробка, постановка та виробництво . Тож у мене є 3 файли

  1. application-development.yml
  2. application-staging.yml
  3. застосування-виробництво.імл

Мій application.yml знаходиться всередині src/main/resources. Я встановив активний профіль у application.yml як:

spring:
  profiles.active: development

Інші 3 конфігураційні файли для профілю є в C:\configпапці.

Я використовую плагін gradle для затемнення. Коли я намагаюся зробити " bootRun ", я встановлюю аргументи командного рядка в моїй конфігурації gradle в затемненні як

 -Dspring.profiles.active=staging -Dspring.config.location=C:\Config

Однак властивість командного рядка не відображається, і мій активний профіль завжди встановлюється як розвиток (про який я вже згадував у файлі application.yml). Також папка C: \ Config не шукається для конкретних конфігураційних файлів профілю.

Я думаю, що мені щось тут не вистачає. Я намагаюся розібратися в цьому останні 2 дні. Але не пощастило. Я дуже вдячний за будь-яку допомогу.


Чи можете ви також додати свій bootRunкомандний рядок
Biju Kunjummen

Я запускав це від eclipse і не командний рядок до цих пір. Але я спробував запустити з використання "gradle bootRun -Dspring.config.location = C: \ Config \ -Dspring.profiles.active = staging" і отримав той самий результат.
O-OF-N

Відповіді:


342

У командному рядку можна додати / змінити властивості весни за двома різними способами.

Варіант 1: Властивості системи Java (аргументи VM)

Важливо, щоб параметри -D були перед вашою програмою.jar, інакше вони не розпізнаються.

java -jar -Dspring.profiles.active=prod application.jar

Варіант 2: Аргументи програми

java -jar application.jar --spring.profiles.active = prod --spring.config.location = c: \ config

45
Порядок параметрів -D дійсно важливий :)
март

3
як ви можете цього досягти під час розгортання контейнера tomcat? У такому випадку я просто кладу свою війну в папку webapps tomcat, як я можу надати інформацію про профіль? встановивши властивості системи?
prayagupd

@prayagupd так, у вашому файлі bash_profile можна встановити властивості системи.
найкращі побажання

2
@maneesh Так, я використовую змінну env, SPRING_PROFILES_ACTIVE експортовану через ~/.bash_profile. export SPRING_PROFILES_ACTIVE=e2e
prayagupd

1
Коли ви говорите, що порядок важливий: Чи можемо ми передати обидві аргументи: -Dspring.profile.active та -Dspring.config.location таким чином, що профіль встановлюється відповідно до першого аргументу, а файл властивості підбирається відповідно до другі аргументи? Напр .:java -Dspring.profiles.active=$ENV -Dspring.config.location=file:///aws-secrets-manager/properties/application-$ENV.properties /code/app.jar
Pramod Setlur

26

Моя найкраща практика - визначити це як аргумент VM "-D". Зверніть увагу на відмінності між весняним завантаженням 1.x та 2.x.

Профілі для включення можна вказати в командному рядку:

Весна-черевик 2.x

-Dspring-boot.run.profiles=local

Весна-черевик 1.x

-Dspring.profiles.active=local

приклад використання з maven:

Весна-черевик 2.x

mvn spring-boot:run -Dspring-boot.run.profiles=local

Весна-черевик 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

Ви маєте на увазі весна / весна-черевик? (Весна 1x та Весна 2x)!
smilyface

1
@smilyface весняний черевик. весняний завантажувач також доступний у різних версіях: mvnrepository.com/artifact/org.springframework.boot/spring-boot
Sma Ma

2
Я використовую spring-boot 2.1.3, і -Dspring-boot.run.profiles=localне працював, -Dspring.profiles.active=localпрацював.
Donghua Лю

весна-черевик 2.2.0: робота і те: -Dspring-boot.run.profilesі-Dspring.profiles.active
Григорій Кіслін

17

Мені довелося додати це:

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 за покажчик.


7
Це може бути ще більш простим наступним чином : bootRun { systemProperties = System.properties }. Ця команда буде скопіювати всі параметри, передані з -Dперемикачем, з однаковими клавішами на systemPropertyкарту.
edufinn

це, здається, є лише рішенням градуса, чи немає генічного рішення?
користувач1767316

1
Де саме ви це додаєте? Де-небудь у файлі build.gradle або в певному місці у файлі?
Ентузіаст Скали

16
-Dspring.profiles.active=staging -Dspring.config.location=C:\Config

невірно.

має бути:

--spring.profiles.active=staging --spring.config.location=C:\Config

3
Це спричиняє помилку "Нерозпізнаний варіант: --spring.config.location"
Джеймс Уоткінс

-D - це правильний спосіб встановити властивості системи Java. - щось є параметром bash.
Xdg

--spring.profiles.ctive робота для мене, те саме, що я посилався з docs.spring.io/spring-boot/docs/current/reference/html/…
Pushkar

Це також працює для мене під час використання Run As -> Java-додатка в Eclipse
Олів'є Боассе

11
насправді БОТИ правильні, це залежить від того, як він використовується: це може бути java -Dspring.profiles.active=staging -Dspring.config.location=C:\Config your-spring-boot-app.jarАБОjava your-spring-boot.jar --spring.profiles.active=staging --spring.config.location=C:\Config
Dexter Legaspi

9

Ви можете використовувати наступний командний рядок:

java -jar -Dspring.profiles.active=[yourProfileName] target/[yourJar].jar

9

Є ще один спосіб, встановивши змінну ОС , SPRING_PROFILES_ACTIVE .

наприклад:

SPRING_PROFILES_ACTIVE=dev gradle clean bootRun

Довідка: Як встановити активні профілі весни


Так, і це дозволяє уникнути необхідності зникати з тим, як Gradle передає властивості системи до програми.
ben3000

Це акуратний спосіб. Його також слід використовувати для встановлення користувачів бази даних та паролів та інших конфіденційних конфігурацій, щоб вони не перевірялися в контролі версій.
Ігор Донін

7

Під час налаштування профілю через плагін 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"

Я бачив цю поїздку багато людей .. сподіваюся, що це допомагає


1
змінився на mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar: див. docs.spring.io/spring-boot/docs/current/maven-plugin/examples/…
rwenz3l

@ rwenz3l Дякую! що працює для мене, якраз модернізував проект з Spring Boot 1 до 2. Тепер я просто додаю їх у свій bashrc ... springmvn="mvn clean spring-boot:run -Dspring.profiles.active=local -Dspring-boot.run.profiles=local"
Джон Сміт

5

Я думаю, що ваша проблема, ймовірно, пов’язана з тим, що ваш 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


Дякую, що вказали на це. Однак, коли я запускаю -Dspring.profiles.active = інсценування -Dspring.config.location = C: \ Config \ також задає мені те саме питання. Навіть активний профіль не відображається. Я думаю, чомусь мій командний рядок не передається.
O-OF-N

1
Ви повинні слідувати порадам в цьому питанні , щоб передати аргументи в bootRun stackoverflow.com/questions/25079244 / ...
JST

Дякую. Це справді допомогло.
O-OF-N

4

Відповідь Майкла Іна правильна, але, здається, потрібне краще пояснення!

Багато з вас згадували, що -Dце правильний спосіб вказати параметри JVM, і ви абсолютно праві. Але Майкл також має рацію, як згадується в документації Spring Boot Profiles .

У документації не зрозуміло, що це за параметр: --spring.profiles.activeце не стандартний параметр JVM, тому якщо ви хочете використовувати його у своєму IDE, заповніть правильні поля (тобто аргументи програми)


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.