Spring의 프로파일 기능과 Spring Boot의 application.properties

Spring의 프로파일 기능



프로파일은 DI 컨테이너 내의 빈 그룹입니다. 임의의 그룹 이름을 지정할 수 있습니다.

Bean에 프로파일을 지정하려면 @Profile 어노테이션을 사용하십시오.

DevBean.java
@Profile("dev")
@Component
public class DevBean {
}

ProductionBean.java
@Profile("production")
@Component
public class ProductionBean {
}
@Profile가 추가되지 않은 Bean은 특정 프로파일에 속하지 않습니다 (기본 프로파일이라고도 함). 프로파일이없는 Bean은 런타임에 어떤 프로파일을 지정하더라도 항상 활성화됩니다.

DefaultBean.java
@Component
public class DefaultBean {
}

다중 프로파일 지정


@Profilevalue 요소는 배열이므로 하나의 bean에 대해 여러 프로파일을 지정할 수 있습니다. 둘 이상을 지정하면 런타임에 프로파일 중 하나가 지정된 경우 활성화됩니다 (모든 프로파일을 런타임에 지정할 필요는 없습니다).
@Profile({"profile1", "profile2"})
@Component
public class FooBean {
}

논리 연산자 사용


! (부정), & (그리고), | (또는)를 이용할 수도 있습니다.

profile1 이외에서 활성화됨
@Profile("!profile1")
@Component
public class FooBean {
}

런타임에 profile1과 profile2가 모두 지정되면 활성화됨
@Profile("profile1 & profile2")
@Component
public class FooBean {
}

런타임에 profile1 또는 profile2가 지정되면 활성화됨
@Profile("profile1 | profile2")
@Component
public class FooBean {
}
&| 가 혼재하는 경우는 반드시 괄호 () 가 필요합니다.
@Profile("profile1 | profile2 & profile3")@Profile("profile1 | (profile2 & profile3)")

런타임 프로파일 지정



런타임에 "이번에는이 프로필을 사용할거야!"라고 지정하는 방법은 여러 가지가 있습니다. 자주 사용하는 것은 다음 세 가지입니다. 위의 것보다 우선 순위가 높아집니다.
  • JUnit 테스트 클래스에 @ActiveProfiles("プロファイル名") 추가
  • 복수 지정시는 배열 지정 @ActiveProfiles({"profile1", "profile2"})

  • java 명령에 -Dspring.profiles.active=プロファイル名 추가
  • 복수 지정시는 콤마 단락 -Dspring.profiles.active=profile1,profile2

  • 환경 변수 SPRING_PROFILES_ACTIVE에 프로파일 이름 지정
  • 복수 지정시는 콤마 단락 SPRING_PROFILES_ACTIVE=profile1,profile2


  • 앞에서 언급했듯이 가장 중요한 점은 런타임에 어떤 프로파일을 지정하더라도 프로파일이없는 빈은 항상 사용된다는 것입니다.

    Spring Boot의 application.properties



    Spring Boot를 사용할 때 구성 파일 application.properties도 프로파일을 사용할 수 있습니다. application.properties는 프로파일이 없으며 application-profilename.properties는 프로파일을 지정할 때만 사용되는 설정입니다.

    즉, application.properties 에 쓴 설정은, 어떤 프로파일을 지정해도 사용된다고 하는 것입니다.

    프로파일을 지정한 후 application.properties 및 application-프로파일 이름 .properties에 같은 이름의 속성이 있으면 후자의 값이 우선(=덮어쓰기)됩니다.

    application.properties
    sample.value1=Default1
    sample.value2=Default2
    

    application-dev.properties
    # devプロファイル指定時はこちらの値が使われる
    sample.value1=Dev1
    

    Spring Boot를 사용할 때 런타임 프로파일 지정



    Spring Boot를 사용하는 경우 앞에서 설명한 방법 외에도 명령 줄 인수로 지정할 수 있습니다.

    명령행 인수로 프로파일 지정
    $ java -jar target/spring-boot-profiles-sample-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
    

    IntelliJ IDEA (Ultimate Edition 전용)의 경우 실행 설정에 지정할 수 있습니다 (런타임에 -D에서 추가됨).



    샘플 코드



    참고 자료


  • Spring Reference Documentation - Core Technologies
  • Spring Boot reference Documentation - 4.2. Externalized Configuration
  • 좋은 웹페이지 즐겨찾기