콘텐츠로 이동

2024 02 20

2024-02-20

Spring Batch 내의 트랜잭션

참고: https://github.com/joelonsw/TIL/blob/master/2023-kakao-1st/concepts/SpringBatch.md 참고: https://www.inflearn.com/questions/740169/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EB%B2%94%EC%9C%84-%EC%A7%88%EB%AC%B8

  • 개요 - Tasklet: Step이 중지될 때 까지 execute 메서드가 계속 반복해서 수행하고, 수행할 때마다 새로운 독립적인 트랜잭션이 얻어짐 - Spring Batch에서는 read/process/write의 프로세스를 하나의 트랜잭션으로 감싸고 있음 - 이 트랜잭션은 Tasklet 안에서 시작/종료됨
  • Tasklet에 @Transactional 선언시? - 스프링 배치 기본 트랜잭션 외부에 별도 트랜잭션이 위치함 - 스프링 배치에서 생성한 트랜잭션 : 시작 ~ 종료 시 어플리케이션 단에서 하나의 락으로 동기화 - 트랜잭션 시작 시 Lock 획득, 트랜잭션 종료 시 Lock 해제
  • 스프링 배치에서는 @Transactional과 같은 외부 트랜잭션 선언이 원칙적으로 금지 - Tasklet에서 선언한 @Transactional 트랜잭션을 스프링 배치의 기본 트랜잭션이 동일하게 Lock 획득 못해서 데드락 발생할 가능성 있음