JobRepositoryTestUtils.removeJobExecutions()
를 실행해야 한다.@Autowired private JobRepositoryTestUtils jobRepositoryTestUtils; @AfterEach void tearDown() { jobRepositoryTestUtils.removeJobExecutions(); }
autoCommit=false
로 설정했을 때이다.removeJobExecutions()
메소드 내부에서 호출하는 메소드들에 제대로 된 트랜잭션이 안 걸려 있기 때문이다.tearDown()
에 @Transactional
설정 : 실패.autoCommit=true
이건 당연히 작동한다. 하지만 내가 원하는건 false
autoCommit=false
, batch 데이터소스는 autoCommit=true
로 하는 것이 좋다.@Autowired private JobRepositoryTestUtils jobRepositoryTestUtils; @Autowired private PlatformTransactionManager platformTransactionManager; /** * {@link JobRepositoryTestUtils#removeJobExecutions()} 내부에 transaction이 없는데 ''autoCommit=false'' 설정때문에 * 이 메소드 내부의 update 쿼리가 rollback 되는 현상이 발생해서 강제로 트랜잭션을 설정해준다. */ @AfterEach void tearDown() { TransactionTemplate transactionTemplate = new TransactionTemplate(platformTransactionManager); transactionTemplate.afterPropertiesSet(); transactionTemplate.execute(status -> { jobRepositoryTestUtils.removeJobExecutions(); return null; }); }