[Spring] 스프링에서 Property 파일 다루기 ( @PropertySource, @Value)

이혜지·2021년 2월 3일
3

Spring

목록 보기
6/15
post-thumbnail
post-custom-banner

목표 : 동적으로 Property 값을 받아 오기 위해 Property마다 값을 지정해주고, 그 property를 불러오기. DB정보를 hibernate에 set할때 property로 가져와서 쓰게끔

@PropertySource


PrppertySource를 Spring 에 추가하기 위해서는 Environment 인 @Configuration 클래스와 함께 사용된다.

@PropertySource 사용 예

@Configuration 
@PropertySource("classpath:/com/myco/app.properties")
public class AppConfig{
	
    @Autowired 
    Environment env;
    
    @Bean
    public TestBean testBean(){
    	TestBean testBean = new TestBean();
        testBean,setName(env.getProperty("testbean.name"));
        return testBean;
    }
}

환경 객체는 구성 클래스에 @Autowired 되어 TestBean 객체를 채울 때 사요오딥니다. 위의 구서에서 testBean.getName() 을 호출하면 "myTestBean"이 반환됩니다.

${...} 자리 표시자 <bean>및 @value 주석 해결


@PropertySource를 선언.

실습 예

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

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

common.properties 설정

my.name = lhj
my.age = 25
my.status = sad

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

Enviroment를 사용할 EnvUser

@Component
public class EnvUser{
	@Autowired
    Environment env;
    
    @PostConstruct
    void init(){
    	System.out.println(environment.getProperty("my.name"));
        System.out.println(environment.getProperty("my.phone","012-3456-7890")); //없으면 default값
        System.out.println(environment.getProperty("my.age", Integer.class)); //int형으로 자동 캐스팅
        System.out.println(environment.getProperty("my.weight", Integer.class, 50)); //없으면 default값
        try{
        	env.getRequiredProperty("my.money"); //없을 경우 에러
           }catch(IllegalStateException E){
           	System.out.println("에러 발생");
           }
           System.out.println(env.containsProperty("my.name")); //프로퍼티 존재값 boolean값으로 
    }

}
>Environment를 autowired한 후 getProperty를 통해서 프로퍼티값을 확인 할 수 있다.

결과

lhj
012-3456-7890
25
50
에러 발생
true

@value


환경 변수값을주입할 수 있다.

  • 다음 대상에 사용할 수 있다.
    • 필드
    • 메소드 파라미터
    • 생성자 파라미터
  • BeanPostProcessor에 의해서 처리되기 때뭉네 BeanPostProcessor나 BeanFactoryPostProcessor 내에서는 사용할 수 없다.

참고 :

profile
공유 문화를 지향하는 개발자입니다.
post-custom-banner

0개의 댓글