Як активувати профіль Spring Boot під час роботи з IntelliJ?


133

У мене 5 середовищ:

 - local (my development machine)
 - dev
 - qc
 - uat
 - live
 - staging

Я хочу, щоб різні властивості програми використовувались для кожного середовища, тому у мене є такі файли властивостей, кожен з яких має різну URL-адресу для джерела даних:

 - application.properties  (containing common properties)
 - application-local.properties
 - application-dev.properties
 - application-qc.properties
 - application-uat.properties
 - application-live.properties

Я використовую IntelliJ і запускаю свою програму за допомогою bootRun в плагіні Gradle на моїй локальній машині. Я буду використовувати розгортання того самого файлу війни програми у всіх інших середовищах, на яких працює Tomcat.

Я спробував додати:

--spring.profiles.active = локальний

до конфігурації запуску за параметрами сценарію.

Я спробував додати

-Dspring.profiles.active = локальний

до конфігурації запуску під параметрами VM.

Ні робота. Я продовжую бачити повідомлення INFO під час запуску: " Немає активного профілю, повертаючись до стандартних профілів: за замовчуванням

Якщо я запускаю додаток із командного рядка Windows за допомогою

gradle bootRun

але я спершу встановив змінну середовища

set SPRING_PROFILES_ACTIVE=local

Тоді все працює.

Отже, моє запитання полягає в тому, як я активувати свій локальний профіль весняного завантаження при запуску bootRun від IntelliJ?


1
Чому ви запускаєте додаток через gradle? Чи не було б в 10 разів зручніше використовувати конфігурацію запуску? Там є поле, де можна встановити профілі, щоб увімкнути ...
Стефан Ніколь,

Я використовую конфігурацію запуску в IntelliJ, як пояснено вище. Не працює.
dleerob

2
Ні, не ти. Я говорю про "Конфігурація запуску Spring Boot" - Виконати -> Редагувати конфігурацію> Нове> Spring Boot.
Стефан Ніколь

Так, я відійшов від конфігурації запуску Spring Boot, оскільки мені потрібно було розширити проект.properties на application.properties в моєму build.gradle, і якщо я використовував конфігурацію запуску Spring Boot, це, схоже, не працює. Я
розбираюсь

1
Використання конфігурації Spring Boot здається більшою проблемою, ніж варто. "Зробити" просто копіює ресурси та не фільтрує / не змінює їх відповідно до сценарію складання. Тоді кажучи йому запустити 'build' від gradle замість 'make' просто викликає запуск заморожування. Якщо я використовую bootRun замість мого запису в оточенні, як описано нижче, все працює добре.
dleerob

Відповіді:


194

Я додав -Dspring.profiles.active=testдо параметрів VM, а потім повторно запустив цю конфігурацію. Це спрацювало чудово.

Це можна встановити за допомогою

  • Вибір Run | Edit Configurations...
  • Перейдіть на Configurationвкладку
  • Розкрийте Environmentрозділ, щоб розкритиVM options

Я застряг у тій же ситуації, але для проекту Maven. Дякую за допомогу. Ми встановили параметр VM для кожного тестового файлу.
Sri9911

2
Це також не працює для мене. Я використовую gradle та два модулі (api та ui)
Virkom

1
Не працює і для мене, також тут використовую gradle.
IARI

Здравствуйте, я маю ту саму проблему, але ця помилка не виправляє проблему. що мається на увазі під реран конфігурацією? це так само, як і повторне виконання завдання?
user1456110

Я пройшов цей тест після редагування, як показано.
Том

82

Якщо ви фактично використовуєте конфігурації запуску весняного завантаження (на даний момент підтримуються лише в Ultimate Edition), заздалегідь можна налаштувати профілі в налаштуваннях "Активні профілі".

введіть тут опис зображення


1
Дякую, я впевнений, що це буде працювати, однак я не використовую конфігурацію запуску Spring Boot, я використовую конфігурацію запуску Gradle, у якій немає поля "Активні профілі". Мій gradle збирає фільтри та модифікує деякі файли властивостей, які він копіює в каталог збірки, тому для цього я використовую конфігурацію запуску Grade.
dleerob

Як зазначено вище у відповіді: якщо це не працює для вас, переконайтеся, що ви проїжджаєте argsу своєму Application.main()напр.SpringApplication.run( Application.class, args );
Xaero Degreaz

Ця функція підтримується лише у версії Ultimate.
Жульєн Малідж

Дякуємо @JulienMalige за вказівку на це. Я відредагую свою відповідь.
Даніель Бубенхайм


9

Весняне завантаження, здається, змінило спосіб читання параметрів VM у міру розвитку. Ось дещо спробувати, коли ви запускаєте програму в Intellij і хочете активувати якийсь профіль:

1. Змініть параметри VM

Відкрийте "Редагувати конфігурацію" в "Запустити" та в "Параметри VM", додайте: -Dspring.profiles.active=local

Він фактично працює з одним моїм проектом з Spring Boot v2.0.3.RELEASEі Spring v5.0.7.RELEASE, але не з іншим проектом з Spring Boot v2.1.1.RELEASEі Spring v5.1.3.RELEASE.

Також, бігаючи з Maven або JAR, люди згадували про це:

mvn spring-boot:run -Drun.profiles=dev

або

java -jar -Dspring.profiles.active=dev XXX.jar

(Дивіться тут: як використовувати профілі Spring Boot )

2. Проходження аргументів JVM

Десь згадується, що Spring змінює спосіб запуску заявок, якщо вказати деякі параметри JVM; він розвиває інший процес і не передасть отриманий аргумент, щоб це не спрацювало. Єдиний спосіб передавати до нього аргументи:

mvn spring-boot:run -Dspring-boot.run.jvmArguments="..."

Знову ж таки, це для Мейвена. https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html

3. Налаштування (додаток) env var

Що для мене працює для другого проекту, це встановлення змінної середовища, як згадувалося в одній відповіді вище: "Редагувати конфігурацію" - "Змінна середовище" та

SPRING_PROFILES_ACTIVE=local

1
Насправді має бути var env SPRING_PROFILES_ACTIVE.
Джош М.

Я додав його в "Запуск конфігурації" IDEA "Параметри VM", наприклад "spring.profiles.active", і він працює. Можливо, інша форма, як urs, використовується у загальних рисах у властивостях системи?
WesternGun

Якщо ви додаєте його до ~/.profileподібного чи подібного, вам доведеться використовувати SPRING_PROFILES_ACTIVE- spring.profiles.activeймовірно, він працює лише як аргумент у командному рядку.
Джош М.

1
Ага .. значить, ви маєте на увазі те саме, що я підозрював; реальна система env не просто додаток env. Добре, я редагую.
WesternGun

8

Я в кінцевому підсумку додав у свій build.gradle таке:

bootRun {
  environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "local"
}

test {
  environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "test"
}

Тож тепер при запуску bootRun від IntelliJ він встановлює за замовчуванням "локальний" профіль.

У інших наших середовищах ми просто встановимо змінну середовища "SPRING_PROFILES_ACTIVE" у Tomcat.

Я отримав це з коментаря, знайденого тут: https://github.com/spring-projects/spring-boot/pull/592


6

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

public static final void main(String... args) {
    SpringApplication.run(Application.class, args);
}

Дякую за відповідь та пропозицію, проте я передаю свої аргументи в.
dleerob

Це фактично вирішило мою проблему. Чомусь, коли я створював проект за допомогою Gradle, він не автоматично генерував мій Applicationклас, так це робив це вручну з пам'яті. Пропустив argsкрок, і тому поле "Активні профілі" в конфігурації запуску не спрацювало - мені довелося вручну перейти в -Dspring.profiles.activeполе параметрів VM.
Xaero Degreaz

3

Я використовую Intellij Community Edition. Перейдіть на "Запустити / налагодити конфігурації"> вкладка Бігун> Змінні середовища> натисніть кнопку "...". Додати: SPRING_PROFILES_ACTIVE = локальний

spring.profiles.active


3

Для Spring Boot 2.1.0 та новіших версій ви можете використовувати

mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar


2
У вашому командному spring-boot:run -Dspring-boot.run.profiles=local
пан К.

з весняним завантаженням: запустіть цю відповідь
kakabali

2

У моєму випадку я використовував конфігурацію нижче в параметрах VM в IntelliJ, вона не IntelliJвибирала локальні конфігурації, але після її перезавантаження вибрала деталі конфігурації IntelliJі сервіс почав працювати.

-Dspring.profiles.active=local

0

Спробуйте це. Відредагуйте файл build.gradle наступним чином.

ext { profile = project.hasProperty('profile') ? project['profile'] : 'local' }


-3

Встановлюйте -Dspring.profiles.active=localпід аргументи програми.


Я вилучив цитати зі свого запитання вище. Я фактично не використовую лапки, я просто намагався показати, що саме я вкладаю в поля конфігурації запуску
dleerob,

5
Ви маєте на увазі варіанти VM!
Міхаїл Міхайлідіс

Ця відповідь є дуже оманливою, оскільки програма не визнає аргументи програми!
yuranos

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