복붙노트

[SPRING] 스프링 배치 - 전체 작업에 대해 하나의 트랜잭션

SPRING

스프링 배치 - 전체 작업에 대해 하나의 트랜잭션

나는 Spring-Batch를 사용하여 데이터베이스에 일부 객체를 생성하는 배치를 실행하고, 이러한 객체에서 파일을 생성 한 다음 FTP 서버로 파일을 전송합니다.

따라서, 나는 2 단계를 가지고있다 : 하나는 DB로부터 conf를 읽고, DB에 삽입하고 파일을 생성한다; 두 번째는 파일을 FTP 서버로 보냅니다.

문제는 FTP 서버에 문제가있을 때 트랜잭션을 롤백 할 수 없기 때문에 (DB에 새로운 삽입을 취소하는 것입니다).

어떻게 다른 단계에서 하나의 트랜잭션 만 사용하도록 작업을 구성 할 수 있습니까?

해결법

  1. ==============================

    1.이것은 스프링 배치 (spring-batch)의 트랜잭션 특성으로 인해 나쁜 생각입니다. IMHO 간단한 해결책은 작업이 시작될 때 생성 된 토큰으로 1 단계에서 저장된 데이터를 표시하고 FTP 업로드가 실패하면 정리 단계로 이동하여 토큰이있는 모든 데이터를 삭제하는 것입니다.

    이것은 스프링 배치 (spring-batch)의 트랜잭션 특성으로 인해 나쁜 생각입니다. IMHO 간단한 해결책은 작업이 시작될 때 생성 된 토큰으로 1 단계에서 저장된 데이터를 표시하고 FTP 업로드가 실패하면 정리 단계로 이동하여 토큰이있는 모든 데이터를 삭제하는 것입니다.

  2. ==============================

    2.벨라 막스와 동의 : 이것은 나쁜 생각입니다.

    벨라 막스와 동의 : 이것은 나쁜 생각입니다.

    그러나이 단계도 실패 할 수 있으므로 트랜잭션을 롤백하지 않기 때문에 세 번째 정리 단계를 수행하지 않습니다.

    삽입 된 항목을 FTP에 아직 보내지 않았 음을 나타내는 플래그로 표시 할 수 있습니다. 세 번째 단계는 플래그를 전환하여 이러한 항목이 FTP로 전송되었음을 나타냅니다.

    그런 다음 cron / batch / 4 번째 정리 단계 / FTP로 보내지지 않은 모든 항목을 제거하는 것이 필요합니다.

  3. from https://stackoverflow.com/questions/19031186/spring-batch-one-transaction-over-whole-job by cc-by-sa and MIT license