외부 파일 설정시에 사용하는
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 하위의 위치를 나타낸다.


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
springframework + commons-configuration + jasypt 사용 예
springframework와 연동하여 사용하는 예 프로퍼티 관련하여서는 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer 클래스를 사용한다. (설명 및 사용 예는 생략) jasypt를 이용하여 암..
bcuts.tistory.com
'dev > Problem' 카테고리의 다른 글
[PRBM] mybatis 설정간 에러 발생 (0) | 2022.08.06 |
---|---|
[PRBM] log4jdbc-log4j2 설정 간 에러 발생 (0) | 2022.08.06 |
[PRBM] Junit Error 해결 (Mybatis mapping) (0) | 2022.08.05 |
[PRBM] Tomcat Error (0) | 2022.08.03 |
[문제해결] The fully qualified name of the bean's class, except if it serves only as a parent definition for child bean definitions. (0) | 2022.03.02 |