필자의 특별한 시나리오에서는 파일에서 데이터베이스로 읽는 거대한 엔티티를 유지해야하지만 커밋 간격은 value = 1
으로 구성됩니다. 또한 사용 된 CompositeItemProcessor
의 대리자 프로세서가 멱등수인지 여부는 확실하지 않습니다. 그래서 재 처리에 낭비되는 시간을 방지하고 db에 대한 많은 사용되지 않는 쿼리를 피할 수있는 방법이 있다면 제 질문입니다. 또한 SkipListener를 사용하여 특정 테이블에 읽기/처리/기록 오류를 기록하고 이러한 구성 (재 처리 없음)이 해당 테이블을 준수하지 않는다고 의심합니다.건너 뛰기가 발생할 때 동일한 청크/항목의 이중 처리에서 배치를 방지하는 방법이 있습니까?
스프링 배치 2.1.9를 사용하고 있습니다.
미리 감사드립니다.
____________________________ UPDATE 연구의 몇 일 후 2016년 7월 5일 ____________________________
나는 일부 사용자와 스프링 개발자 사이의 개념적인 논쟁이 깨달았다.
그래서 아직 방법이없는 프레임 워크에 전체 목록을 검색하지 않고 실패한 항목을 발견 (청크 크기 경우에도 1). 프레임 워크의 내부 동작은
ItemWriter#write
방법은 항목의 목록을받습니다나는 지금이 2014 post의 답변에 대한 코멘트에 @MichaelMinella가 말한대로 작성 단계에서 발생 생략 예외에 설계된대로이 동작 웍 것을 알고있다. 한 번에 하나씩 을 보내지 않으면 목록에있는 중 어느 것이 작가에게 예외를 던진 것인지 확인할 수있는 방법이 없습니다.
FaultTolerantChunkProcessor
을 사용하고
RetryTemplate
은
this 2013 post에 설명되어 있으며 이에 대한 자세한 내용은
spring batch forum 2012 post에서 확인할 수 있습니다.
프레임 워크는 @joshiste도 기대했지만 프레임 워크는 항상 읽기 전용으로 캐시 된 목록을 다시 처리하고 각 항목의 미니 청크를 처리하여이 목록에 오류가있는 항목이 있는지 여부를 확인합니다 하나의 요소. 이 동작을 무시하거나이 비싼 다시 시도를 건너 뛰도록 일괄 처리를 구성하는 방법을 알고 싶습니다. 처리시 오류를 등록하기 위해 SkipCheckListener를 사용하려면이 작업을 수행 할 수 없습니다. – guilhermerama