본문 바로가기
dev/Problem

[외부설정파일 가져오기] property-placeholder

by dev_Step 2022. 3. 2.

외부 파일 설정시에 사용하는 

property-placeholder방법에 대해서 여러가지로 알아보자.

 

property-placeholder를 사용할경우 bean 설정시에 외부 파일에서 정의한 내용을 가지고 사용할수 있다

${....} 형식으로.

 

일단 3가지 방법이있다.

 

1. context property-placeholder를 설정하는방법

 

2. PropertyPlaceholderConfigurer를 Bean으로 등록하여 사용하는 방법

 - locations로 위치를 정해주는 방법과, 외부설정파일을 다시 bean으로 등록하여 참조하는 방법이있다.

 

 

1. context property-placeholder를 설정하는방법으로는 

--root-context.xml에서 등록을 해주는데.

우선 namespace에서 context를 설정해주고,

아래와 같이 <context:property-placeholder locations=""/> 위치를 정해준다.

이때 locations="" 에서 설정파일의 위치를 정해준다.

classpath:  하여 위치를 정해줄때는    src/main/java, src/main/resources 하위의 위치를 나타낸다. 

database.properties 내용

 

2. PropertyPlaceholderConfigurer를 Bean으로 등록하여 사용하는 방법

<Bean> 등록을 해주는데 이때 class="" 주소를 칠때 정확히 쳐주기 바란다 아니면 경고가 나오게 된다.

<property name=""> locations 정하고 해당 값에 properties 파일의 경로를 입력해준다.

 

 

3.PropertyPlaceholderConfigurer를 Bean으로 등록하고, properties파일도 <bean>으로 등록하여 PropertyPlaceholderConfigurer에서 참조하여 사용하는 방법을 알아보자

이방법은 maven 을 통해서 dependency 를 등록을 우선 해줘야 class를 <BEAN> 등록할수 있다.

우선적으로 org.springmodules와 commons-configuration을 dependency로 등록해주자 해당 내용을 등록해줘야 

org.apache.commons.configuration.CompositeConfiguration //와

org.springmodules.commons.configuration.CommonsConfigurationFactoryBean//를 <bean>등록 할 수 있다.

 

우선적으로 properties 파일을 <bean> 등록하기 위하여

<org.apache.commons.configuration.CompositeConfiguration> 을 bean등록하여 주고 해당 bean에 

 Constructor-args: 생성자를 주입하여 주는데 이때 

<properties 파일을 사용할 경우에는>

<bean class="org.apache.commons.configuration.PropertiesConfiguration"> 을 bean등록 하여 해당 propertiesConfiguration의 생성자에 Properties파일을 values 값으로 등록해준다 

//

<xml 파일을 사용한 경우에는>

<bean class="org.apache.commons.configuration.XMLConfiguration">

        <constructor-arg type="java.lang.String">

               <value>default_config.xml</value>

        <constructor-arg/>

 </bean>이 된다.

//

이때 경로는  resource 바로 아래의 경로가 지정되므로 

폴더가 있을경우  => 폴더명/파일이름

없을경우 => 파일이름  으로 지정해 주면된다.

 

이렇게 생성된 <BEAN>은 PropertyPlaceholderConfigurer에서 참조되어 사용된다.

위에서 보다시피 <ref bean="configuration"> 을 통해서 아래서 생성한 configuration을 

springmodules.commons.configuration.CommonsConfigutationFactoryBean의 configurations가 configuration을 참조하고 있다.

 

이렇게 등록하면 아래와같이 ${...} 형식으로 외부에서 설정한 값을 가져와서 사용할 수 있다.

 

 

 

 

============================================================================마치면서 해당 내용을 JUnit을 통해서 확인하면서 발생했던 오류들로는

1. properties 안의 내용에서 DB 설정 내용을 잘못 설정해서 나온에서 (db.username 을 잘못 지정함)

2. PropertyConfiguration에서 Properties 의 경로를 잘못 설정해준경우

아래 오류를 보다시피 configuration source classpath: ~ 를 못찾는 다고 나오는데 이경우

classpath를 빼주고 바로 config/database.properties 의 경로를 써주니 정상적으로 경로를 찾았다.

 

 

 

쓰면서 참고한 블로그

https://junior-datalist.tistory.com/36?category=896712 

 

다양한 의존객체 주입 (constructor-arg, property)

다양한 의존 객체 주입 방법 bean 객체 내에 의존객체를 주입하는 대표적인 방법은 생성자(constructor) 주입 기본자료형(property) 주입 리스트 주입 해쉬맵 주입 4가지가 있습니다. 그중에서 constructor-

junior-datalist.tistory.com

https://bcuts.tistory.com/37

 

springframework + commons-configuration + jasypt 사용 예

springframework와 연동하여 사용하는 예 프로퍼티 관련하여서는 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer 클래스를 사용한다. (설명 및 사용 예는 생략) jasypt를 이용하여 암..

bcuts.tistory.com