File(Delimited) TO DB

  • Batch Job Xml Sample

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

    <import resource="classpath:JobConfig.xml"/>

    <job-component xmlns="http://www.bankwareglobal.com/schema/batchex" id="jobcomp" with-dependon="true">
        <base-package name="bxm.dft.smp.batch.bean">
            <include name="MSmpDelimitedToDB*Btch"/>
        </base-package>
    </job-component>

    <!--
        * Batch job : FILE(FIXED) TO FILE(DELIMITED) sample
        * Batch step
            - JSmpDelimitedToDB100 : FILE(FIXED) TO FILE(DELIMITED) sample initialization process
            - JSmpDelimitedToDB200 : Reads a DELIMITED format file and performs Insert into DB
     -->
    <job id="JSmpDelimitedToDB" xmlns="http://www.bankwareglobal.com/schema/batchex">
        <step id="JSmpDelimitedToDB100" next="JSmpDelimitedToDB200" parent="parentStep">
            <tasklet ref="MSmpDelimitedToDBInitBtch"/>
        </step>
        <step id="JSmpDelimitedToDB200" parent="parentStep">
            <tasklet>
                <chunk reader="RJSmpDelimitedToDB200" processor="MSmpDelimitedToDBBtch" writer="MSmpDelimitedToDBBtch"/>
            </tasklet>
        </step>
    </job>

    <!--
        * Bean configuration for reading sample employee information Delimited file
     -->
    <bean id="RJSmpDelimitedToDB200" parent="RDelimit" scope="step">
        <property name="resource" value="file:///data1/prod/bxm400/dat/delimited_file_#{jobParameters['oDate']}.txt" />
        <property name="encoding" value="UTF-8" />
        <property name="delimiter" value=";" />
        <property name="targetType" value="bxm.dft.smp.batch.bean.dto.MSmpDelimitedToDBBtch01Dto" />
    </bean>
</beans>
  • Batch Source Code Sample

@BxmBean("MSmpDelimitedToDBBtch")
@Scope("step")
@BxmCategory(logicalName = "FILE(DELIMITED) TO DB sample")
public class MSmpDelimitedToDBBtch implements ItemProcessor<MSmpDelimitedToDBBtch01Dto, MSmpDelimitedToDBBtch02Dto>,
        ItemWriter<MSmpDelimitedToDBBtch02Dto> {

    final Logger logger = LoggerFactory.getLogger(this.getClass());

    private DSmpEmpTmp001 dSmpEmpTmp100;

    /**
     * process
     * - Performs processing per record of target data according to business requirements.
     */
    @Override
    @BxmCategory(logicalName = "process : sample employee information processing")
    public MSmpDelimitedToDBBtch02Dto process(MSmpDelimitedToDBBtch01Dto in) throws Exception {
        MSmpDelimitedToDBBtch02Dto out = null;

        /**
         * Check data read from file
         */
        if (in.getFeduEmpNo() == 0 || in.getFeduDeptNo() == 0) {
            logger.warn("Employee number[{}], department number[{}] is not valid. It will be skipped.",
                    new Object[] { in.getFeduEmpNo(), in.getFeduDeptNo() });
            return null;
        }

        /**
         * Execute individual business logic
         * ...
         */

        /**
         * Set the Item to be passed to write
         */
        out = new MSmpDelimitedToDBBtch02Dto();
        out.setFeduEmpNo(in.getFeduEmpNo()); // set [FW sample employee number]
        out.setFeduEmpNm(in.getFeduEmpNm()); // set [FW sample employee name]
        out.setFeduOccpNm(in.getFeduOccpNm()); // set [FW sample occupation name]
        out.setFeduMngrEmpNo(in.getFeduMngrEmpNo()); // set [FW sample manager employee number]
        out.setFeduHireDt(in.getFeduHireDt()); // set [FW sample hire date]
        out.setFeduPayAmt(in.getFeduPayAmt()); // set [FW sample salary amount]
        out.setFeduDeptNo(in.getFeduDeptNo()); // set [FW sample department number]

        return out;
    }

    /**
     * write
     * - Performs the role of recording the processed result data to DB or file per commit unit.
     */
    @Override
    @BxmCategory(logicalName = "write : sample employee information processing")
    public void write(List<? extends MSmpDelimitedToDBBtch02Dto> in) throws Exception {
        if (dSmpEmpTmp100 == null) {
            dSmpEmpTmp100 = DefaultApplicationContext.getBean(DSmpEmpTmp001.class);
        }

        /**
         * While looping through the Items delivered as a List, set the DTO for Insert into DB in List form.
         */
        List<DSmpEmpTmp001Dto> dSmpEmpTmp100insert02InDtos = new ArrayList<DSmpEmpTmp001Dto>();
        for (MSmpDelimitedToDBBtch02Dto mSmpDelimitedToDBBtch02Dto : in) {
            DSmpEmpTmp001Dto smpEmpTmp001Dto = new DSmpEmpTmp001Dto();

            smpEmpTmp001Dto.setFeduEmpNo(mSmpDelimitedToDBBtch02Dto.getFeduEmpNo()); // set [FW sample employee number]
            smpEmpTmp001Dto.setFeduEmpNm(mSmpDelimitedToDBBtch02Dto.getFeduEmpNm()); // set [FW sample employee name]
            smpEmpTmp001Dto.setFeduOccpNm(mSmpDelimitedToDBBtch02Dto.getFeduOccpNm()); // set [FW sample occupation name]
            smpEmpTmp001Dto.setFeduMngrEmpNo(mSmpDelimitedToDBBtch02Dto.getFeduMngrEmpNo()); // set [FW sample manager employee number]
            smpEmpTmp001Dto.setFeduHireDt(mSmpDelimitedToDBBtch02Dto.getFeduHireDt()); // set [FW sample hire date]
            smpEmpTmp001Dto.setFeduPayAmt(mSmpDelimitedToDBBtch02Dto.getFeduPayAmt()); // set [FW sample salary amount]
            smpEmpTmp001Dto.setFeduDeptNo(mSmpDelimitedToDBBtch02Dto.getFeduDeptNo()); // set [FW sample department number]
        }

        /**
         * insert processing
         * - Note 1 : For C/U/D processing with CONNECTED_BATCH, queries are executed in bulk at the Commit point.
         * - Note 2 : For C/U/D processing with CONNECTED_BATCH, execution occurs at the Commit point, so the return value is an arbitrary negative value (no meaning).
         */
        dSmpEmpTmp100.insert02(dSmpEmpTmp100insert02InDtos);
    }
}
SWLab Bankware Global
  • 전체
  • BXM
  • BXCM
  • BXCP
  • BXI
제품 선택 시 더 정확한 매뉴얼 가이드를 제공해드립니다.

Copyright© Bankwareglobal All Rights Reserved.