개발

스프링 properties profile 적용하기

snow-line 2020. 11. 29. 23:45
반응형

개발 환경에 따라 properties 값이 다른 경우 하나의 properties 파일을

 

사용하기 보다 profile별로 구분하여 사용하는 방식이 좋다.

 

properties파일명 뒤에 profile 명을 다음과 같이 설정한 후

 

vm options에 다음과 같이 사용할 프로파일을

 

지정하면 해당 properties를 읽어서 사용할 수 있다.

 

먼저 @Configuration 어노테이션을 선언한

 

설정 클래스에서 프로퍼티를 읽을 수 있도록 설정을 추가한다.

@Profile("prod")
    @Bean
    public static PropertySourcesPlaceholderConfigurer prodProperties() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        configurer.setLocations(new ClassPathResource("system_prod.properties"));
        configurer.setFileEncoding(FILE_ENCODING);

        return configurer;
    }

    @Profile("dev")
    @Bean
    public static PropertySourcesPlaceholderConfigurer devProperties() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        configurer.setLocations(new ClassPathResource("system_dev.properties"));
        configurer.setFileEncoding(FILE_ENCODING);

        return configurer;
    }

    @Profile("test")
    @Bean
    public static PropertySourcesPlaceholderConfigurer testProperties() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        configurer.setLocations(new ClassPathResource("system_test.properties"));
        configurer.setFileEncoding(FILE_ENCODING);

        return configurer;
    }

    @Profile("design")
    @Bean
    public static PropertySourcesPlaceholderConfigurer designProperties() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        configurer.setLocations(new ClassPathResource("system_design.properties"));
        configurer.setFileEncoding(FILE_ENCODING);

        return configurer;
    }

 

환경별로 프로퍼티를 선언한다.

인텔리J를 사용하고 있을 경우에는 vm options에 사용할 프로파일을 지정한다. 

-Dspring.profiles.active=dev

 

톰캣 파일에 직접 설정할 때는 setenv.sh 파일에 추가하면 된다.

JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active={profile_name}"

 

반응형