[출처] iBATIS 2.3.0 또는 2.3.2 이상 sqlmap 자동 리로딩(2010/01/21 20:10) 작성자 당근 from
http://blog.naver.com/PostView.nhn?blogId=ws0222&logNo=140099442688
개요
iBATIS + Spring 개발시 쿼리 매핑 파일이 변경되면 웹애플리케이션 서버를 재기동해야 적용이 됐었다. 이러한 불편을
없애기 위해 매핑 파일 변경을 실시간으로 감시, 적용하는 모듈을 제공한다.
감시 대상 이 모듈은 iBATIS sqlmap 클라이언트의
sqlMap 및 sqlMapConfig 파일의 변경을 감지, 실시간 적용해준다.
제약사항
감시 대상 파일들은 스타트업 당시에 결정된다. 그러므로 추가된 파일들에 대해서는 감지가 되지 않고, 삭제된 파일들에 대해서는
경고 메시지가 나온다. 예를 들어, sqlMapConfig에 sqlMap 파일이 추가되거나 하면 해당 맵이 적용되기는 하지만, 실시간 변경 감지
대상으로 추가되지는 않는다.
요구사항
iBATIS sqlmap 2.3.0, Java 1.4, Spring 2.5 이상 또는 iBATIS sqlmap 2.3.2
이상,
Java 1.5 이상, Spring 2.5.5 이상
적용 순서
1. Spring의 applicationContext 설정 파일 중 sqlMapClient를 얻기 위한
SqlMapClientFactory 빈을 신규 클래스로 교체한다.
2. 변경 감지 시간 간격 (1000분의 1초 단위)를
지정한다.
3. 라이브러리 추가
backport-util-concurrent-3.1.jar
-> 첨부파일참조
-------------------------------------------------
===eogv
적용순서
– Spring의 applicationContext 설정파일 중 sqlMapClient를 얻기 위한 SqlMapClientFactory 빈을 신규클래스로
교체
– 변경 감지 시간 간격 (1000분의 1초 단위)를 지정한다.
– 라이브러리 추가(pom.xml)
<dependency>
<groupId>backport-util-concurrent</groupId>
<artifactId>backport-util-concurrent</artifactId>
<version>3.1</version>
</dependency>
-------------------------------------------------
[ applicationContext.xml ]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC
"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="no"
default-lazy-init="false"
default-dependency-check="none">
<!--
JNDI DataSource for J2EE environments -->
<bean
id="dataSource"
class="com.emaintec.common.db.JndiObjectFactoryBeanUtil">
<property
name="jndiName">
<value>com.emaintec.datasource</value>
</property>
</bean>
<!--
Transaction manager for a single JDBC DataSource (alternative to JTA)
-->
<bean
id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property
name="dataSource">
<ref local="dataSource"
/>
</property>
</bean>
<bean
id="defaultTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager"
ref="transactionManager"/>
<property
name="transactionAttributes">
<props>
<prop
key="*">
PROPAGATION_REQUIRED,
-java.lang.Exception
</prop>
</props>
</property>
</bean>
<!-- 변경전
<bean
id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="dataSource" ref="dataSource" />
<property
name="configLocation" value="WEB-INF/config/sql_map_config.xml" />
</bean>
-->
<!--
변경후 :
1. SqlMapClientFactoryBean 를 변경하여 파일변경시 다시 xml 로딩하도록 한다.
2. mappingLocations 을 사용하여 패턴을 주어 여러 파일을 한번에 지정 가능하다
3. checkInterval : 1000/1 초에 한번식 파일변경 체크를 함
-->
<bean
id="sqlMapClient"
class="com.emaintec.common.ibatis.RefreshableSqlMapClientFactoryBean">
<property name="dataSource" ref="dataSource"
/>
<property name="mappingLocations"
value="classpath:com/emaintec/common/ibatis/sqlmap/**/*.xml" />
<property name="configLocation" value="WEB-INF/config/sql_map_config.xml"
/>
<property name="checkInterval" value="1000" />
</bean>
</beans>
[ sql_map_config.xml ]
<?xml version="1.0" encoding="EUC-KR"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="40"
maxSessions="20"
maxTransactions="5"
useStatementNamespaces="true"
defaultStatementTimeout="5"
statementCachingEnabled="true"
classInfoCacheEnabled="true"
/>
<!-- dtd 상 하나는 지정해 주어야 하므로 dummy xml 을 만들어 넣어준다.-->
<sqlMap
resource="../classes/com/emaintec/common/ibatis/sqlmap/testcase-dummy.xml"/>
</sqlMapConfig>
[ testcase-dummy.xml ]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC
"-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap
namespace="Dummy"/>
[ Java file : 첨부파일 참조 ]
RefreshableSqlMapClientFactoryBean.java
SqlMapClientRefreshable.java
SqlMapExtractingSqlMapConfigParser.java
'Programming > ibatis + mybatis' 카테고리의 다른 글
테이블 컬럼 카멜 표기법 변환기(mybatis) (1) | 2018.08.07 |
---|---|
Spring + mybatis 환경에서 xml 파일 변경시 서버 재시작 없이 반영 방법 (0) | 2015.06.01 |
ibatis란? (0) | 2014.03.19 |
ibatis 문법(iterator, iterate) (0) | 2014.03.03 |