환경별로 다른 설정 파일 읽기 기술

Properties 상속으로 공통 설정과 서브프로젝트 설정 분리

권남님이 해결하려고 하는 설정 문제는 다음 환경에서도 발생합니다.  ^^ 제가 글을 잘못 읽었었네요 ^^ 



제가 사용하는 프로필별 설정파일 관리법입니다. 

1. 사용할 프로필을  지정합니다. 

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Profile("dev")

public @interface Dev {}


@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Profile("production")

public @interface Production {}




2. 프로필별 설정을 가질 Config를 지정합니다. 

@Dev

@Configuration

@PropertySource("classpath:/config/app/profiles/props/application.dev.xml")

public class AppConfigDev {...}



@Production

@Configuration

@PropertySource("classpath:/config/app/profiles/props/application.production.xml")

public class AppConfigProduction {...}




3. 공통 설정을 가질 Config를 지정합니다. 


@Configuration

@Import({ 

AppConfigLocal.class, AppConfigDev.class, AppConfigStaging.class, AppConfigProduction.class, 

})

@PropertySource("classpath:/config/app/profiles/props/application.common.xml")

public class AppConfigCommon {...}



4. 어플리케이션을 실행 시킬때 프로필을 지정해줍니다. 

-Dspring.profiles.active=dev  또는  -Dspring.profiles.active=production






덧글

  • 권남 2013/07/28 22:51 #

    원래 의도인 공통 설정과 프로젝트별 설정 통합의 경우에도 @PropertySource로 가능합니다. @PropertySource의 특징이 기본적으로 지정되 모든 설정을 Environment에서 통합 관리하는 거니까요.
    근데 ${PlaceHolder}는 안되는 걸로 알고 있습니다.
  • 밀리네스 2013/07/29 08:40 #

    Placeholder는 값의 조합을 @Value("${parent}/${child}" String targetPath; 같은 형식으로 되긴하죠.

    제가 해결되지 않는다고 한것은 Property 방식으로 여러 파일에 분산된 설정의 경우, 같은 키를 가지는 값을 변경 하려고 할때 누락이 발생하기 쉽다는 거였습니다. dev.xml에도 abc가 있고 local.xml, staging.xml, production.xml 등등 여러 프로필 Property 파일의 값들을 모두 수정해야 한다는것을 쉽게 까먹는 다는 거였습니다. ^^
※ 로그인 사용자만 덧글을 남길 수 있습니다.