Tasklet

  • 배치 작업 Xml Sample

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:batch="http://www.springframework.org/schema/batch"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:batch-int="http://www.springframework.org/schema/batch-integration"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch.xsd
                           http://www.springframework.org/schema/batch-integration http://www.springframework.org/schema/batch-integration/spring-batch-integration.xsd">

    <!--
        * 배치작업 : 배치 샘플 데이터 초기화 설정
        * 배치스텝
            - sample-init-001 : 배치 샘플 데이터 초기화 (SMP_EMP_BAT, SMP_EMP_TMP 테이블 삭제 및 SMP_EMP_BAT 테이블 데이터 생성)
     -->
    <job id="sample-init" xmlns="http://www.springframework.org/schema/batch">
        <step id="sample-init-001">
            <tasklet ref="SmpInitTasklet"/>
        </step>
    </job>

</beans>
  • 배치 소스코드 Sample

package sample.batch.service;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

import bxm.common.annotaion.BxmCategory;
import bxmc.batch.ext.context.DefaultBatchApplicationContext;
import bxmc.config.dbio.util.DasUtils;
import bxmc.core.ext.context.DefaultApplicationContext;
import sample.batch.component.SmpEmpGenComponent;
import sample.batch.dbio.DSmpEmpBat001;
import sample.batch.dbio.DSmpEmpTmp001;
import sample.batch.dbio.dto.DSmpEmpBat000Dto;

/**
 * 샘플 초기화 배치 Tasklet
 *
 * @author sysadmin
*/
@Scope("step")
@Service("SmpInitTasklet")
@BxmCategory(logicalName="샘플 초기화 배치", description="샘플 초기화 배치")
public class SmpInitTasklet implements Tasklet{
    private Logger logger= LoggerFactory.getLogger(getClass());

    private SmpEmpGenComponent smpEmpGenComponent;
    private DSmpEmpBat001 dSmpEmpBat001;
    private DSmpEmpTmp001 dSmpEmpTmp001;

    /**
     * Tasklet
     * - 단순 DB CRUD 수행이나 반드시 한번에 Commit/Rollback 되어야 하는 배치에서 사용하는 패턴.
     */
    @Override
    @BxmCategory(logicalName="샘플 초기화 배치", description="샘플 초기화 배치")
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {

        dSmpEmpBat001 = DefaultApplicationContext.getBean(dSmpEmpBat001, DSmpEmpBat001.class);
        dSmpEmpTmp001 = DefaultApplicationContext.getBean(dSmpEmpTmp001, DSmpEmpTmp001.class);
        smpEmpGenComponent = DefaultApplicationContext.getBean(smpEmpGenComponent, SmpEmpGenComponent.class);

        // 초기 적재 건수 설정
        int genCount = 10000;
        String genCountStr = DefaultBatchApplicationContext.getJobParameter("getCount");
        if(genCountStr != null) {
            genCount = Integer.parseInt(genCountStr);
        }

        // SMP_EMP_BAT 테이블 삭제
        int delCnt = dSmpEmpBat001.delete01();
        logger.info("SMP_EMP_BAT 삭제 건수 : {}", delCnt);

        // SMP_EMP_TMP 테이블 삭제
        delCnt = dSmpEmpTmp001.delete01();
        logger.info("SMP_EMP_TMP 삭제 건수 : {}", delCnt);

        // 초기데이터 적재
        List<DSmpEmpBat000Dto> addDataList = new ArrayList<>();
        for(int ix = 1; ix <= genCount; ix++) {

            // 사원번호 생성
            addDataList.add(smpEmpGenComponent.generateEmpInfo(ix));

            // 1000건 단위로 DB 처리
            if(addDataList.size() % 1000 == 0) {
                // 데이터 적재
                dSmpEmpBat001.insertList01(addDataList);
                // Flush 처리
                DasUtils.flushStatements();
                // 초기화
                addDataList.clear();
            }
        }

        return null;
    }
}
SWLab Bankware Global
  • 전체
  • BXM
  • BXCM
  • BXCP
  • BXI
제품 선택 시 더 정확한 매뉴얼 가이드를 제공해드립니다.

Copyright© Bankwareglobal All Rights Reserved.