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.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 인수 전달

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.