제안 청크의 이점을 활용할 수 있습니다 :
1) JdbcCursorItemReader를 사용하여 데이터를 읽고 있습니다.
단계별로 다시 시작할 수있는 ItemStream 인터페이스가 이미 구현되어 있으므로 모든 기본 구성 요소를 사용하는 것이 좋습니다. 그러나 여러분이 언급 한 것처럼 언젠가는 요청이 복잡해 지거나 나처럼 여러분은 이미 재사용 할 수있는 서비스 나 DAO를 가지고 있습니다.
ItemReaderAdapter를 사용하는 것이 좋습니다. 이를 통해 데이터를 얻기 위해 호출 할 대리자 서비스를 구성 할 수 있습니다. 조직 다음 targetMethod이 ItemReaders의 읽기 계약 (더 이상 데이터는 null)
작업이 재시작 할 필요가없는 경우, 당신은 단순히 클래스를 사용할 수를 존중해야한다는
는 <bean id="MyReader" class="xxx.adapters.MyItemReaderAdapter">
<property name="targetObject" ref="AnExistingDao" />
<property name="targetMethod" value="next" />
</bean>
참고. 당신이 다시 시작될 수 있도록 작업을해야하는 경우 springframework.batch.item.adapter.ItemReaderAdapter
, 당신은 다음과 같이 자신의 ItemReaderAdapter을 만들 수 있습니다
public class MyItemReaderAdapter<T> extends AbstractMethodInvokingDelegator<T> implements ItemReader<T>, ItemStream {
private long currentCount = 0;
private final String CONTEXT_COUNT_KEY = "count";
/**
* @return return value of the target method.
*/
public T read() throws Exception {
super.setArguments(new Long[]{currentCount++});
return invokeDelegateMethod();
}
@Override
public void open(ExecutionContext executionContext)
throws ItemStreamException {
currentCount = executionContext.getLong(CONTEXT_COUNT_KEY,0);
}
@Override
public void update(ExecutionContext executionContext) throws ItemStreamException {
executionContext.putLong(CONTEXT_COUNT_KEY, currentCount);
log.info("Update Stream current count : " + currentCount);
}
@Override
public void close() throws ItemStreamException {
// TODO Auto-generated method stub
}
}
,
out-of-the-box itemReaderAdapter는 다시 시작할 수 없기 때문에 ItemStream을 구현하는 자신 만의 아이템을 만들 수 있습니다.
2) 7 단계 대 1 단계
이 기사에서는 compositeProcessor를 사용하여 1 단계로 간다. 7 단계 옵션은 IMO에만 문제가 발생합니다.
1) 7 단계 databean : 그래서 writer는 7 단계까지 databean에서 커밋합니다. 그러면 7 단계 writer는 실제 데이터베이스에 커밋을 시도하고 오류가 발생합니다 !!! 모두 잃어 버리고 배치는 1 단계에서 다시 시작해야합니다!
2) 컨텍스트가있는 7 단계 : 스프링 배치 메타 데이터에 상태가 저장되어 있기 때문에 더 좋을 수 있습니다.하지만 springBatch의 메타 데이터에 큰 데이터를 저장하는 것은 좋지 않습니다 !!
3)은 IMO로가는 길입니다. ;-)
답장을 보내 주셔서 감사합니다. – Nandan
행정 측면에서는 어느 것이 가장 적합할까요? 별도의 단계 또는 compositeItemProcessor와 한 단계? – Nandan
별도의 단계는 장애 시나리오에서 다시 시작할 때 복잡성을 초래합니다. CompositeItemProcessor를 사용하는 단일 단계는 실패시 모든 프로세스가 롤백된다는 것을 의미합니다. –