ItemStream, ItemReader Interface
배치처리를 위해 데이터를 읽어올 ItemStream, ItemReader Interface 를 구현한다.
(1) ItemStream 작성
open 메소드에서는 입력 파라미터 값 확인과 데이터를 조회 처리(Iterator)할 DBIO를 호출한다.
close 메소드에서는 DB 연결 정보를 종료 처리한다.
public class MSmpDBToDBBtch implements ItemStream { // ItemStream Interface 추가
/**
* 배치 입력파라미터 "deptNo" Get
*/
@Value("#{jobParameters['deptNo']}")
private String feduDeptNo;
@Override
public void open(ExecutionContext executionContext) throws ItemStreamException
{
dsmpEmployee001 = DefaultApplicationContext.getBean(dsmpEmployee001, DsmpEmployee001.class);
if(StringUtils.isEmpty(feduDeptNo))
{
throw new ItemStreamException("배치 입력아규먼트 'deptNo' 값이 존재하지 않습니다.");
}
/**
* 입력받은 "deptNo" 에 대하여 샘플용 직원정보를 Iterator로 가져온다.
*/
DSmpEmployeeSelectList01In inDto = new DSmpEmployeeSelectList01In();
inDto.setDeptNo(Integer.parseInt(feduDeptNo));
iterator = dsmpEmployee001.selectList001(inDto).iterator();
}
@Override
public void update(ExecutionContext executionContext) throws ItemStreamException
{
}
@Override
public void close() throws ItemStreamException
{
DasUtils.closeCursor(iterator);
}
}
(2) ItemReader 작성
조회 처리한 Iterator 에서 한건 씩 데이터를 가지고 와 ItemProcessor로 Return 처리 하고, 데이터가 존재하지 않을 경우에는 null 을 Return하여 종료 처리한다.
public class MSmpDBToDBBtch implements ItemReader<MSmpDBToDBBtch01Io>, ItemStream { // ItemReader Interface 추가
@Override
public MSmpDBToDBBtch01Io read() throws Exception, UnexpectedInputException,
ParseException, NonTransientResourceException
{
MSmpDBToDBBtch01Io out = null;
if(iterator.hasNext())
{
out = new MSmpDBToDBBtch01Io();
DSmpEmployeeSelectList01Out input = iterator.next();
out.setEmpNo(input.getEmpNo()); // set [FW샘플 임직원번호]
out.setEmpNm(input.getEmpNm()); // set [FW샘플 임직원명]
out.setOccpNm(input.getOccpNm()); // set [FW샘플 직업명]
out.setMngrEmpNo(input.getMngrEmpNo()); // set [FW샘플 관리자임직원번호]
out.setHireDt(input.getHireDt()); // set [FW샘플 입사일자]
out.setPayAmt(input.getPayAmt()); // set [FW샘플 급여금액]
out.setDeptNo(input.getDeptNo()); // set [FW샘플 부서번호]
}
return out;
}