우리는 Spring 배치를 사용하는 배치 작업에서 ItemProcessListener와 SkipListener를 구현했습니다. 별도의 트랜잭션을 생성하지 않고 건너 뛴 항목을 데이터베이스에 기록 할 수 있습니다. 그러나 ItemProcessListener에서 onProcessError 메소드가 호출 될 때 트랜잭션은 해당 런타임 예외로 인해 롤백됩니다.ItemProcessListener 내의 DB에 오류 레코드를 기록 할 수 없습니다 - onProcessError
DB 업데이트 용 서비스 인터페이스에서 @Transactional 및 propagation을 REQUIRES_NEW로 사용했지만 여전히 트랜잭션을 롤백했습니다.
우리의 목표는 프로세스 또는 기록기 구성 요소에 오류가 있고 배치가 실패 할 때마다 데이터베이스에 예외 세부 사항을 기록하는 것입니다. 위에서 설명한 것처럼 onProcessError 메서드에서 DB 삽입 또는 재정의 된 수신기에서 onWriteError 메서드를 실행하면 로깅이 작동하지 않습니다. 트랜잭션이 롤백됩니다.
onProcessError에서 주석을 사용하여 새 트랜잭션을 만들려고했으나 실패했습니다. 친절하게도 동일한 정보를 입력하십시오.
이렇게하면 문제가 명확 해집니다.