[spring] IntelliJ에서 실행할 때 스프링 부트 프로파일을 어떻게 활성화합니까?

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을 실행할 때 어떻게 로컬 스프링 부트 프로파일을 활성화합니까?



답변

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

이 설정은

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

답변

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

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


답변

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

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

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

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


답변

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


답변

나는 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 에서 찾은 의견에서 이것을 얻었습니다.


답변

명령 행 매개 변수를 응용 프로그램 기본 메소드로 전달하지 않았을 수 있습니다. 몇 주 전에 같은 실수를했습니다.

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


답변

Intellij Community Edition을 사용합니다. “실행 / 디버그 구성”> 러너 탭> 환경 변수> “…”단추를 클릭하십시오. 추가 : SPRING_PROFILES_ACTIVE = 로컬

spring.profiles.active