Connected Fetch Read
DBIO의 Executor 유형에 "CONNECTED_BATCH"가 지정되면 DBIO는 조회된 결과를 한번에 List에 복사하여 전달하지 않고 연결이 유지된 상태에서 조회된 데이터를 Fetch하여 건 별로 전달한다. 다음은 Connected Fetch Read를 위한 DBIO 사용방법을 예시를 통해 설명한다
-
DBIO Executor 유형
-
ItemReader에서 DBIO 사용
@BxmBean("MMdpCustMng01")
@Scope("step")
@BxmCategory(logicalName = "샘플고객처리배치모듈01"
public class MMdpCustMng01 implements ItemStream, ItemReader<MMdpCustMng01Dto>
private DEduCustomer001 dEduCustomer001;
private Iterator<DEduCustomer001SelectList01OutDto> iterator; //(1)
@Override
@BxmCategory(logicalName = "샘플고객처리 Open")
public void open(ExecutionContext executionContext) throws ItemStreamException {
if(dEduCustomer001 == null)
{
dEduCustomer001 = DefaultApplicationContext.getBean(DEduCustomer001.class);
}
DEduCustomer001SelectList01InDto inDto = new DEduCustomer001SelectList01InDto();
inDto.setAddrCd("A1");
iterator = dEduCustomer001.selectList01(inDto).iterator(); //(1)
}
@Override
@BxmCategory(logicalName = "샘플고객처리 Read")
public MMdpCustMng01Dto read() throws Exception, UnexpectedInputException
, ParseException, NonTransientResourceException {
MMdpCustMng01Dto output = null;
if(iterator.hasNext()) //(2)
{
DEduCustomer001SelectList01OutDto customer = iterator.next();
output = new MMdpCustMng01Dto();
output.setCustId(customer.getCustId()); // set [고객ID]
}
return output;
}
@Override
@BxmCategory(logicalName = "샘플고객처리 Update")
public void update(ExecutionContext executionContext) throws ItemStreamException {
}
@Override
@BxmCategory(logicalName = "샘플고객처리 Close")
public void close() throws ItemStreamException {
DasUtils.disconnectDasExecutor(iterator); //(3)
}
(1) "CONNECTED_BATCH" Executor DBIO를 사용하는 배치 어플리케이션에서는 대량의 데이터를 조회하여 처리하기 때문에 조회결과 전체를 전달하는 List를 사용할 수 없으며, 예제 코드에서처럼 Iterator를 사용한다.
(2) ItemReader를 구현하는 read() 메소드에서는 iterator의 다음 데이터 여부를 확인하여 다음데이터를 리턴한다.
(3) Step이 완료 될 때 호출되는 close() 메소드에서는 연결유지 상태인 DBIO에 연결 세션을 disconnect하도록 명시적으로 disconnect()를 호출한다.