Connected Fetch Read

DBIO의 Executor 유형에 "CONNECTED_BATCH"가 지정되면 DBIO는 조회된 결과를 한번에 List에 복사하여 전달하지 않고 연결이 유지된 상태에서 조회된 데이터를 Fetch하여 건 별로 전달한다. 다음은 Connected Fetch Read를 위한 DBIO 사용방법을 예시를 통해 설명한다

  • DBIO Executor 유형

DBIO Executor - CONNECTED_BATCH(Select)
Figure 1. DBIO Executor - CONNECTED_BATCH(Select)
  • 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()를 호출한다.

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

Copyright© Bankwareglobal All Rights Reserved.