본문 바로가기

backend/Spring

스프링 프로퍼티 설정 주입1 - @PropertySource와 Enviroment

스프링 프로젝트를 하면서 jdbc 설정 값, version 등과 같이 정적인 데이터를 프로퍼티로 많이 사용합니다. 우리는 프로퍼티를 annotation으로 쉽게 외부값을 가져와서 사용할 수 있습니다.



스프링에서 런타임시 프로퍼티 값을 가져오기 위해서 사용할 것 2가지.



@PropertySource를 선언.

@Configuration
@PropertySource("classpath:static/properties/common.properties")
public class AppConfig {
 

}
  • @PropertySource 어노테이션에 coommon.properties의 위치를 넣어주면, Enviroment객체에 프로퍼티 값이 자동으로 주입된다.



common.properties 설정

my.name=ryudung
my.age=29
my.status=tiered

common.properties에 주입할 데이터를 properties형태로 생성.

Enviroment를 사용할 EnvUser

  @Component
  public class EnvUser {
 
      @Autowired
      Environment environment;
 
      @PostConstruct
      void init(){
        System.out.println(environment.getProperty("my.name"));
        System.out.println(environment.getProperty("my.phone","001-0023-2333"));//없을 경우 디폴트 값 설정: "001-0023-2333" 
        System.out.println(environment.getProperty("my.age",Integer.class));//int 형으로 자동 캐스팅 
        System.out.println(environment.getProperty("my.weight",Integer.class, 64));// 없을 경우 디폴트 값 설정: 64 
        try{
            environment.getRequiredProperty("my.money");//없을 경우 에러 발생 
        }catch (IllegalStateException E){
            System.out.println("에러 발생");
        }
        System.out.println(environment.containsProperty("my.name"));//프로퍼티가 존재하는지 유무 불리언 값 
      }
  }

Environment를 자동와이어한 후 getProperty를 통해서 프로퍼티값을 확인할 수 있다.


결과
ryudung
001-0023-2333
29
64
에러 발생
true



@PropertySource 스프링 4.0에 추가된 옵션 - ignoreResourceNotFound

@Configuration
@PropertySource(value = {
        "classpath:static/properties/common.properties",
        "file:/etc/properties/common/common.properties",
        "classpath:static/properties/common1.properties",
}, ignoreResourceNotFound = true)
public class AppConfig {
 
    @Bean
    public PropertyPlaceholderConfigurer propertyPlaceholderConfigurer() {
        return new PropertyPlaceholderConfigurer();
    }
}
  • 배열 형태로 properties 위치를 정의할 수 있다. 여기서 point는 스프링 4.0부터 추가된 ignoreResourceNotFound = true 이다. ignoreResourceNotFound 옵션을 통해서 없는 properties는 무시해버린다.
  • 예상 했듯이 당연히 아래로 갈수록 같은 프로퍼티명을 override 해버린다.
  • 개발, qa, 실서버 마다 프로퍼티값이 다를 수 있는데 이를 잘 이용하면, 적절히 적용할 수 있다.

gitHub 소스코드


----------------------------------------------------------------------------------

다음편에서는 @value를 사용하는 방법에 대해서 설명하겠습니다.

http://ryudung.tistory.com/21