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를 사용하고 로컬 컴퓨터의 Gradle 플러그인에서 bootRun을 사용하여 앱을 실행하고 있습니다. Tomcat을 실행하는 다른 모든 환경에서 동일한 응용 프로그램 war 파일을 배포하는 데 사용할 것입니다.

나는 추가를 시도했다 :

--spring.profiles.active = local

스크립트 매개 변수에서 구성을 실행합니다.

나는 추가를 시도했다

-Dspring.profiles.active = local

VM 옵션에서 구성을 실행합니다.

둘 다 작동하지 않습니다. 시작시 INFO 메시지가 계속 표시됩니다. 활성 프로파일 세트 없음, 기본 프로파일로 돌아 가기 : 기본값

Windows 명령 줄에서 다음을 사용하여 앱을 실행하면

gradle bootRun

하지만 먼저 환경 변수를 설정했습니다

set SPRING_PROFILES_ACTIVE=local

그런 다음 모든 것이 작동합니다.

그래서 제 질문은 IntelliJ에서 bootRun을 실행할 때 어떻게 로컬 스프링 부트 프로파일을 활성화합니까?


1
왜 gradle을 통해 응용 프로그램을 실행하고 있습니까? 실행 구성을 사용하는 것이 10 배 더 편리하지 않습니까? 프로필을 활성화하도록 설정할 수있는 필드가 있습니다.
Stephane Nicoll

위에서 설명한대로 IntelliJ에서 실행 구성을 사용하고 있습니다. 작동하지 않습니다.
dleerob

2
아냐 내가 말하는 것은 "Spring Boot run configuration"Run-> Edit configuration> New> Spring Boot입니다.
Stephane Nicoll

Aah 예, build.gradle에서 project.properties를 application.properties로 확장해야하기 때문에 Spring Boot 실행 구성에서 벗어나 Spring Boot 실행 구성을 사용하면 작동하지 않는 것 같습니다. 이 문제를 해결하기 위해 살펴본 다음 제안한대로 단순히 활성 프로파일 필드를 사용할 수 있습니다.
dleerob

1
스프링 부트 구성을 사용하는 것은 가치보다 더 어려운 것 같습니다. '만들기'는 단순히 리소스 전체를 복사하고 빌드 스크립트에 따라 필터링 / 변경하지 않습니다. 그런 다음 'make'대신 gradle에서 'build'를 실행하도록 지시하면 실행이 중단됩니다. 아래 답변에 따라 환경 항목과 함께 bootRun을 대신 사용하면 모든 것이 잘 작동합니다.
dleerob

답변:


194

-Dspring.profiles.active=testVM 옵션에 추가 한 다음 해당 구성을 다시 실행했습니다. 완벽하게 작동했습니다.

이 설정은

  • 고르는 Run | Edit Configurations...
  • Configuration탭으로 이동
  • 확장 Environment공개 섹션을VM options

나는 같은 상황에 있지만 Maven 프로젝트에 갇혔습니다. 도와 주셔서 감사합니다. 각 테스트 파일마다 VM 옵션을 설정했습니다.
Sri9911

2
그것은 나에게도 효과가 없다. 나는 gradle과 두 개의 모듈 (api와 ui)을 사용합니다
Virkom

1
여기에서 gradle을 사용하여 나에게도 효과가 없습니다.
IARI

안녕, 나는 같은 문제가 있지만이 수정은 문제를 해결하지 않습니다. 여기서 구성을 다시 실행한다는 것은 무엇을 의미합니까? 작업을 다시 실행하는 것만 큼입니까?
user1456110

표시된대로 편집 한 후 해당 테스트를 실행했습니다.
Thom

82

실제로 스프링 부팅 실행 구성 (현재 Ultimate Edition에서만 지원됨)을 사용하는 경우 "활성 프로파일"설정에서 프로파일을 쉽게 사전 구성 할 수 있습니다.

여기에 이미지 설명을 입력하십시오


1
고맙게도, 이것이 작동 할 것이라고 확신하지만 Spring Boot 실행 구성을 사용하지 않고 "Active Profiles"필드가없는 Gradle 실행 구성을 사용하고 있습니다. 내 gradle 빌드는 빌드 디렉토리에 복사하는 일부 속성 파일을 필터링하고 수정하므로 Grade run 구성을 사용하고 있습니다.
dleerob

위의 대답은 지적이 당신을 위해 작동하지 않는 경우, 당신은에 전달하는 것을 보장 args당신의 Application.main()SpringApplication.run( Application.class, args );
Xaero Degreaz

이 기능은 Ultimate 버전에서만 지원됩니다.
Julien Malige

이것을 지적 해 주셔서 감사합니다 @JulienMalige. 답변을 편집하겠습니다.
다니엘 부벤 하임

11

build.gradle에이 명령을 추가하십시오

여기에 이미지 설명을 입력하십시오

따라서 실행하려면 해당 모양을 구성하십시오.

여기에 이미지 설명을 입력하십시오


9

Spring Boot는 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.RELEASESpring 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 인수 전달

JVM 옵션을 지정하면 Spring이 애플리케이션 프로세스 시작 방법을 변경한다고 언급합니다. 다른 프로세스를 분기하고 수신 된 인수를 전달하지 않으므로 작동하지 않습니다. 인수를 전달하는 유일한 방법은 다음과 같습니다.

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

1
env var는 실제로이어야 SPRING_PROFILES_ACTIVE합니다.
Josh M.

"spring.profiles.active"와 같은 IDEA "VM 옵션"의 "실행 구성"에 추가했으며 작동합니다. 어쩌면 ur와 같은 다른 형식이 시스템 속성에서 시스템 전체에서 사용됩니까?
WesternGun

당신이 그것을 추가하는 경우 ~/.profile또는 이와 유사한, 당신은 사용이 SPRING_PROFILES_ACTIVE- spring.profiles.active가능성에만 명령 줄에서 인수로 사용할 수 있습니다.
Josh M.

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"
}

이제 IntelliJ에서 bootRun을 실행할 때 기본적으로 "local"프로파일이 사용됩니다.

다른 환경에서는 단순히 Tomcat에서 'SPRING_PROFILES_ACTIVE'환경 변수를 설정합니다.

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 2016


3

들어 봄 부팅 2.1.0 과 나중에 사용할 수 있습니다

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


2
당신의 명령 행에있을 것입니다spring-boot:run -Dspring-boot.run.profiles=local
씨 K.

spring-boot : run이 답입니다
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 옵션을 의미합니다!
Michail Michailidis

이 답변은 응용 프로그램에서 프로그램 인수를 인식하지 못하기 때문에 오해의 소지가 있습니다!
yuranos

이 답변은하지 작업, 다른 사람에 의해 언급 한 바와 같이, 그것은 인 IntelliJ 아이디어와 프로그램이 아닌 인수에 VM 옵션에서해야합니다
abstractKarshit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.