잠깐 동안이지만, 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>

Posted by 김용환 '김용환'