인프런 커뮤니티 질문&답변

이준혁님의 프로필 이미지
이준혁

작성한 질문수

스프링 배치

스프링 배치 트랜잭션 관련 질문이 있습니다!

작성

·

1.1K

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
안녕하세요! job repository파트를 보고 궁금한 점이있어 문의드립니다.
job repository는 배치 메타 테이블에 배치 내용을 crud하기위해서 사용되고 이 과정에서 serializable단계의 트랜잭션이 발생한다고 배웠습니다. 그렇다면 step의 비즈니스 로직은 이 트랜잭션 하위에서 execute되니... step의 비즈니스 로직의 트랜잭션 전파레벨을 따로 설정하지 않는다면 모두 트랜잭션으로 동작한다고 이해해야하는걸까요?? 또 이런 상황이라면 비즈니스 로직의 트랜잭션 격리 수준은 serializable을 따르게되는 건가요?!

답변 4

1

정수원님의 프로필 이미지
정수원
지식공유자

스프링 배치의 기본 격리수준은 serializable 입니다.

초기화 시 설정되고 있습니다. 

별도의 트랜잭션을 설정하지 않으면 기본 격리수준을 따르게 됩니다.

이는 두개의 잡이 동시적으로 실행될 경우 동시성 문제를 해결하기 위함입니다.

다만 강의에서도 소개하지만 격리수준은 필요에 의해서 재설정 가능합니다.

BasicBatchConfigurer 를 상속해서 createJobRepository() 메서드를 다시 정의하면 됩니다.

강의를 참고해 주시기 바랍니다.

 

0

이준혁님의 프로필 이미지
이준혁
질문자

답변 감사합니다 ㅎㅎ

제가 우려하는 것은 같은 datasource를 사용하면 같은 트랜잭션 매니저를 공유하게되고

비즈니스로직상 트랜잭션 사용을 원하지 않는 부분도 스프링 배치로 인해 트랜잭션이 걸리지 않을까하는 궁금증이었습니다

0

정수원님의 프로필 이미지
정수원
지식공유자

음..

스프링 배치에서 트랜잭션 매니저는 별도로 생성하지 않으면 하나의 DataSource 와 연결되어 있을 경우 동일한 것을 사용합니다.

일반적으로 이기종 DB 나 서로 다른 Datasource 를 구성해야 할 경우 트랜잭션 매니저를 구분해서 사용합니다.

스프링 배치도 마찬가지로 트랜잭션 매니저를 여러 개 사용해야 할 상황이 발생한다면 모르겠으나 그렇지 않다면 기본 설정대로 하더라도 문제 없을 것 같습니다.

동일한 Datasource 를 사용함에 있어서 다른 트랜잭션 매니저를 사용해야 할 이유는 없어 보입니다.

0

이준혁님의 프로필 이미지
이준혁
질문자

BasicBatchConfiguration 클래스를 보면 BatchConfigurer bean이 없을 때만  BasicBatchConfigure를 사용하는 걸로 보입니다. BatchConfigurer중에 DefaultBatchConfigurer라는 클래스가 있다는 것도 알게됐는데요.

이 클래스를 사용하면 데이터 소스로부터 새로운 트랜잭션 매니저를 생성하고 배치에 사용하는걸로 이해했습니다.

그렇다면, 실무에서 사용할 때 비즈니스 로직의 트랜잭션 매니저가 공유되는 BasicBatchConfigurer를 사용하는 것 보다 새로운 트랜잭션 매니저를 사용하는 DefaultBatchConfigurer를 사용해서 트랜잭션 매니저를 분리하는게 좋을 것 같은데 혹시 어떤걸 추천하시는지 궁금합니다.

이준혁님의 프로필 이미지
이준혁

작성한 질문수

질문하기