IT/Java

Spring - iBATIS : dataSource 의 동적 로딩

yjacket 2010. 7. 14. 17:30

Spring – iBATIS 사용시 보통 WEB-INF/jdbc.properties 파일에 데이터베이스에 접속하기 위한 설정을 저장해 둔다.

데이터베이스 접속 환경이 변경되어 이 파일을 수정한후에는 웹서버를 재시작해줘야 변경된 설정이 반영된다만, 웹서버를 재시작하지 않고, 또 jsp 를 쓰지 않는 – flex & blazeds 만으로 구동되는 웹 – 환경에서 변경된 설정을 바로 반영 해줄 수 있는 방법이 필요해졌다.

방법을 요약하면, 스프링으로부터 WebApplicationContext를 받아와 dataSource bean 객체를 받아온 후 값을 변경해주면 된다.

예제는 아래..

applicationContext.xml

   1: <bean id="webConfigService" class="webConfig.service.WebConfigService" autowire="byType"/>

동적로딩을 구현 할 클래스의 bean 설정에 autowire 를 true 로 설정

 

WebConfigService.java

   1: public class WebConfigService
   2: {
   3:     /**
   4:      * 웹 애플리케이션이 실행중인 경로를 가져오기 위해 WebApplicationContext 를 스프링으로부터 가져와 저장한다.  
   5:      */
   6:     private WebApplicationContext webApplicationContext;
   7:     
   8:     /**
   9:      * 스프링 프레임웍에서 이 쓰기 전용 메서드에 WebApplicationContext을 셋팅한다.
  10:      * @param w
  11:      */
  12:     @Autowired
  13:     public void setWebApplicationContext(WebApplicationContext w)
  14:     {
  15:         webApplicationContext = w;
  16:     }
  17:     
  18:     public void reloadDataSource(String driverClassName, String url, String username, String password)
  19:     {
  20:         BasicDataSource bds = (BasicDataSource) webApplicationContext.getBean("dataSource");
  21:         bds.setDriverClassName(driverClassName);
  22:         bds.setUrl(url);
  23:         bds.setUsername(username);
  24:         bds.setPassword(password);
  25:     }
  26: }

스프링에 의해 WebConfigService 클래스 setWebApplicationContext 메서드가 호출되며 WebApplicationContext 가 셋팅된다.

dataSource 의 값을 변경해주고 싶으면 reloadDataSource 메서드를 쓰면 된다. 설정내용은 즉시 반영 되는듯.