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 file in DELIMITED format 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 to read the 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 of each target record according to business requirements.
*/
@Override
@BxmCategory(logicalName = "process : sample employee information processing")
public MSmpDelimitedToDBBtch02Dto process(MSmpDelimitedToDBBtch01Dto in) throws Exception {
MSmpDelimitedToDBBtch02Dto out = null;
/**
* Check the data read from the file
*/
if (in.getFeduEmpNo() == 0 || in.getFeduDeptNo() == 0) {
logger.warn("Employee number[{}], Department number[{}] is invalid. Skip processing.",
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
* - Records 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 DTOs to be inserted into the 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);
}
}