본문 바로가기
IT/Java

Spring - iBATIS : 웹서버 시작시 jdbc.properties 를 읽지 못해도 무시하게 하자

by yjacket 2010. 7. 14.

웹서버를 포함한 솔루션 배포시에는 데이터베이스 연결 설정 파일을 포함시키기 어렵다. 사용자의 DB접속 환경이 어떨지 알 수 없기 때문이다. 그렇다고 서버 셋업시에 사람이 일일이 설정파일을 만지는게 하는것도 불안하다.

보통은 어플리케이션 설치시에 정보를 입력받아 속성파일로 써주거나, 웹사이트가 구동되고 나서 DB설정을 먼저 하도록 한다. 그런데 문제는 Spring 이 dataSource 객체를 생성하는 방식이다.

 

applicationContext.xml

   1: <bean id="propertyConfigurer"
   2:     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   3:     <property name="locations" value="WEB-INF/jdbc.properties" />
   4: </bean>
   5:  
   6: <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
   7:     <property name="driverClassName" value="${jdbc.driverClassName}" />
   8:     <property name="url" value="${jdbc.url}" />
   9:     <property name="username" value="${jdbc.username}" />
  10:     <property name="password" value="${jdbc.password}" />
  11: </bean>

Spring 은 이처럼 applicationContext.xml 파일로 properties 파일의 위치를 정의하고 dataSource bean에서 이를 참조하도록 해서 웹서버 시작시에 로딩한다. 그런데 만일 웹서버 시작시에 이 파일이 없거나 속성을 읽어오지 못했다면 서버가 시작조차 되지 않는다.

데이터베이스 연결 속성 파일이 없거나 올바르지 않아도 웹서버가 정상적으로 시작되게 하기 위해서는 PropertyPlaceholderConfigurer 클래스의 ignoreUnresolvablePlaceholders 속성을 true 로 만들어주면 되는데, 이렇게 설정하기 위해서 위 코드의 location 속성 정의 아래 다음 내용을 추가 한다.

   1: <property name="ignoreUnresolvablePlaceholders" value="true" />