Spring Batch Admin 을 통합한 Spring Batch 프로젝트에서
아래와 같은 경우 @Transactional 어노테이션이 정상적으로 작동하지 않는 경우가 있습니다.
1. 기존 Spring Batch Admin 라이브러리 내부에 transactionManager가 선언되어 있기 때문에 다른 이름으로 TransactionManager를 선언하여 사용
1 2 3 |
<bean id="mybatisTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="mybatisDataSource" /> </bean> |
2. 위와 같이 선언하고 아래와 같이 어노테이션을 사용하여 트랜젝션을 설정
1 |
@Transactional(value = "mybatisTransactionManager", propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) |
이와 같은 경우에 아무리 Exception를 throw해도 rollback이 안됩니다.
※이런 경우 아래와 같이 Step 설정 시 해당 TransactionManager를 정의하면 이슈를 해결할 수 있습니다.
( transactionManager 속성을 정의하지 않으면 기본으로 “transactionManager” 빈을 inject 하기 때문에 발생한 이슈입니다. )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
@Autowired @Qualifier(value = "mybatisTransactionManager") DataSourceTransactionManager txManager; /* * 중략 */ @Bean public Step generateGoodsStep() throws IOException { return stepBuilderFactory.get("generateGoodsStep") .transactionManager(txManager) //중요!! .<Goods, Goods>chunk(50) .reader(generateGoodsReader()) .processor(generateGoodsProcessor()) .writer(generateGoodsWriter()) .listener(generateGoodsListener()) .build(); } |
0개의 댓글