У меня 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 = local

в конфигурацию запуска в параметрах скрипта.

Я пробовал добавить

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

в конфигурацию запуска в параметрах ВМ.

Ни то, ни другое не работает. Я продолжаю видеть сообщение INFO при запуске, например: Активный профиль не установлен, откат к профилям по умолчанию: по умолчанию

Если я запускаю свое приложение из командной строки Windows, используя

gradle bootRun

но я сначала установил переменную окружения

set SPRING_PROFILES_ACTIVE=local

Тогда все работает.

Итак, мой вопрос: как мне активировать свой локальный профиль загрузки Spring при запуске bootRun из IntelliJ?

Ответы (15)

Я добавил -Dspring.profiles.active = test в параметры виртуальной машины, а затем повторно запустил эту конфигурацию. Сработало отлично.

Это можно установить с помощью

  • Выбор Выполнить | Редактировать конфигурации ...
  • Перейти на вкладку Конфигурация
  • Разверните раздел Environment, чтобы увидеть Параметры виртуальной машины

Установить -Dspring.profiles.active = local в параметрах программы.

Попробуй. Отредактируйте файл build.gradle следующим образом.

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

Если вы действительно используете конфигурации запуска весенней загрузки (в настоящее время поддерживаются только в Ultimate Edition), легко предварительно настроить профили в настройке «Активные профили».

enter image description here

В итоге я добавил в свой 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

Replace your profile name with BE

Вы можете попробовать вышеуказанный способ активации профиля

Вот 2 способа

  1. Использование свойства проекта gradle

В build.gradle добавьте

bootRun{
//https://github.com/spring-projects/spring-boot/pull/592#issuecomment-880263914
    if (project.hasProperty('profiles')) {
        environment SPRING_PROFILES_ACTIVE: profiles
    } else {
        def profiles = 'dev'
        environment SPRING_PROFILES_ACTIVE: profiles
    }
}

В конфигурации intellij gradle измените значение «test» в «-Pprofiles» в соответствии со средой, которую вы хотите запустить

enter image description here

  1. Использование свойства среды

Следуйте за ответом @Hubert https://stackoverflow.com/a/39749545/3333878

И настройте конфигурацию запуска как

enter image description here

Протестировано с IntelliJ Community edition 2021.x

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

  1. Goto Run > Edit Configuration
  2. Choose the configuration you want to edit, in the left under Application.
  3. On the right side > Under Environment Variable, update spring.profiles.active= example spring.profiles.active=dev (observer:- the variable should be without -D flag)
  4. Save the changes and Run the Spring boot app with the same configuration.

Примечание: - Вы также можете создать новую конфигурацию или скопировать существующую на шаге 2 выше, используя опцию, доступную на той же панели.

enter image description here

Вероятная причина может заключаться в том, что вы не передаете параметры командной строки в основной метод приложения. Несколько недель назад я совершил ту же ошибку.

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

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

-Dspring.profiles.active=local

Для Spring Boot 2.1.0 и более поздних версий вы можете использовать

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

Попробуйте добавить эту команду в свой build.gradle

enter image description here

Итак, для запуска настройте эту форму:

enter image description here

Итак, для продолжения ...

Если у вас есть IntelliJ Ultimate, правильный ответ - это тот, который предоставил Daniel Bubenheim

Но если вы этого не сделаете, создайте в Run-> Edit Configurations и на вкладке Configuration добавьте следующую переменную Environment:

SPRING_PROFILES_ACTIVE=profilename

И для выполнения jar выполните:

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

Я использую Intellij Community Edition. Перейдите в «Запуск / отладка конфигураций»> вкладка «Runner»> «Переменные среды»> нажмите кнопку «...». Добавлять: SPRING_PROFILES_ACTIVE = локальный

пружина. Профили.актив.

Spring Boot, похоже, изменил способ чтения параметров виртуальной машины по мере его развития. Вот способ попробовать, когда вы запускаете приложение в Intellij и хотите активировать какой-то профиль:

1. Изменить параметры ВМ

Откройте «Изменить конфигурацию» в «Выполнить» и в «Параметры ВМ» добавьте: -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="..."

Опять же, это для Maven. https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html

3. Настройка (приложение) env var

Что мне подходит для второго проекта, так это установка переменной среды, как упоминалось в ответе выше: «Изменить конфигурацию» - «Переменная среды» и:

SPRING_PROFILES_ACTIVE=local

2022 WebDevInsider