异常“ java.lang.IllegalStateException:在JobRepository中检测到现有事务。”将Spring Batch从2.1.1升级到4.1.1版本后

时间:2019-01-23 11:57:00

标签: java spring spring-batch

我有一个Junit测试用例,可以运行批处理作业。以前,当我具有2.2.1的春季批处理版本时,它可以工作。但是,一旦我升级到版本4.1.1,就会遇到异常

java.lang.IllegalStateException: Existing transaction detected in JobRepository. Please fix this and try again (e.g. remove @Transactional annotations from client).

我尝试从测试班级中删除@Transactional。但是仍然有一个例外,我猜错误是由于两次交易引起的。但是仍然删除其中一个并不能解决该错误。

下面在测试类中使用的注释,它具有测试方法,这些方法调用执行批处理工作的方法。我在测试类和使用SpringJUnit4ClassRunner运行程序的测试方法上使用了Transactional。我也尝试过SpringRunner。

@RunWith(SpringJUnit4ClassRunner.class) @DirtiesContext
@Transactional

此方法将从测试方法中调用。该方法启动了批处理作业。

@Transactional(propagation = Propagation.NOT_SUPPORTED)
public Long startExportJob(){

我的spring核心版本是4.3.18。我需要将其升级到5吗?     帮助我解决这个问题。预先感谢。

1 个答案:

答案 0 :(得分:1)

  

我的spring核心版本是4.3.18。我需要将其升级到5吗?

是的,Spring Batch v4需要Spring Framework v5。请参阅第4版的What's new部分。

在v2.1和v4.1之间进行了很多更改。我建议逐步升级(一次至少升级一个主要版本),否则,您需要检查更改日志并查看可能与测试有关的内容。