작성
·
1.1K
0
답변 4
1
네
스프링 배치의 기본 격리수준은 serializable 입니다.
초기화 시 설정되고 있습니다.
별도의 트랜잭션을 설정하지 않으면 기본 격리수준을 따르게 됩니다.
이는 두개의 잡이 동시적으로 실행될 경우 동시성 문제를 해결하기 위함입니다.
다만 강의에서도 소개하지만 격리수준은 필요에 의해서 재설정 가능합니다.
BasicBatchConfigurer 를 상속해서 createJobRepository() 메서드를 다시 정의하면 됩니다.
강의를 참고해 주시기 바랍니다.
0
답변 감사합니다 ㅎㅎ
제가 우려하는 것은 같은 datasource를 사용하면 같은 트랜잭션 매니저를 공유하게되고
비즈니스로직상 트랜잭션 사용을 원하지 않는 부분도 스프링 배치로 인해 트랜잭션이 걸리지 않을까하는 궁금증이었습니다
0
음..
스프링 배치에서 트랜잭션 매니저는 별도로 생성하지 않으면 하나의 DataSource 와 연결되어 있을 경우 동일한 것을 사용합니다.
일반적으로 이기종 DB 나 서로 다른 Datasource 를 구성해야 할 경우 트랜잭션 매니저를 구분해서 사용합니다.
스프링 배치도 마찬가지로 트랜잭션 매니저를 여러 개 사용해야 할 상황이 발생한다면 모르겠으나 그렇지 않다면 기본 설정대로 하더라도 문제 없을 것 같습니다.
동일한 Datasource 를 사용함에 있어서 다른 트랜잭션 매니저를 사용해야 할 이유는 없어 보입니다.
0
BasicBatchConfiguration 클래스를 보면 BatchConfigurer bean이 없을 때만 BasicBatchConfigure를 사용하는 걸로 보입니다. BatchConfigurer중에 DefaultBatchConfigurer라는 클래스가 있다는 것도 알게됐는데요.
이 클래스를 사용하면 데이터 소스로부터 새로운 트랜잭션 매니저를 생성하고 배치에 사용하는걸로 이해했습니다.
그렇다면, 실무에서 사용할 때 비즈니스 로직의 트랜잭션 매니저가 공유되는 BasicBatchConfigurer를 사용하는 것 보다 새로운 트랜잭션 매니저를 사용하는 DefaultBatchConfigurer를 사용해서 트랜잭션 매니저를 분리하는게 좋을 것 같은데 혹시 어떤걸 추천하시는지 궁금합니다.