잠깐 동안이지만, Batch 업무를 오랜만에 다시 한다. ibatis와 내부 클래스, Spring Batch를 이용해서 Spring Batch가 돌아갈 수 있게 하는 xml 설정에 대한 간단한 설명이다.
* Spring Batch 의 xml 설정하기 (기본 틀)
1. iBatis의 sqlMapConfig 설정 파일을 읽어 SqlMapClient 객체를 불러온다.
<bean id="coreSqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="/sql-map-config.xml" />
</bean>
2. FactoryBean을 이용해서 SqlMapClient 을 가지고 DataSource를 얻어온다.
<bean id="dataSourceSupport" class="com.google.batch.core.dbpm.BatchCoreDataSourceSupport" >
<property name="sqlMapClient" ref="coreSqlMapClient"></property>
</bean>
<bean id="coreDataSource" factory-bean="dataSourceSupport" factory-method="getDataSource" />
3. data source를 이용해서 transactionManager를 만든다.
<bean id="coreTransactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
lazy-init="true">
<property name="dataSource" ref="coreDataSource" />
</bean>
4. SimpleStep을 정의한다.
<bean id="simpleStep" class="org.springframework.batch.core.step.item.SimpleStepFactoryBean" abstract="true">
<property name="transactionManager" ref="coreTransactionManager"></property>
<property name="commitInterval" value="1"/>
</bean>
5. SimpleJob을 정의한다.
<bean id="simpleJob" class="org.springframework.batch.core.job.SimpleJob"
abstract="true">
</bean>
6. 실제 동작할 코드를 제공한다. SimpleJob을 상속한 Job과 SimpleStep을 상속한 step1을 정의한다.
<job id="iambatch" parent="simpleJob" xmlns="http://www.springframework.org/schema/batch">
<step id="step1" parent="simpleStep">
<tasklet ref="myTasklet"/>
</step>
</job>
7. JobLauncher를 정의한다.
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
</bean>
* job repository 추가하기
1. job repository 정의
<batch:job-repository id="jobRepository" data-source="coreDataSource"
transaction-manager="coreTransactionManager" isolation-level-for-create="SERIALIZABLE" table-prefix="BATCH_iambatch_" />
2. job launcher, job, step에 추가한다.
<bean id="simpleJob" class="org.springframework.batch.core.job.SimpleJob"
abstract="true">
<property name="jobRepository" ref="jobRepository" />
</bean>
<bean id="simpleStep" class="org.springframework.batch.core.step.item.SimpleStepFactoryBean" abstract="true">
<property name="jobRepository" ref="jobRepository" />
<property name="transactionManager" ref="coreTransactionManager"></property>
<property name="commitInterval" value="1"/>
</bean>
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
</bean>