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 메서드를 쓰면 된다. 설정내용은 즉시 반영 되는듯.