首页 > 解决方案 > 异常“java.lang.IllegalStateException:在 JobRepository 中检测到现有事务。” 在将 Spring Batch 从 2.1.1 升级到 4.1.1 版本之后

问题描述

我有一个运行批处理作业的 Junit 测试用例。以前当我有弹簧批处理版本 2.1.2 时它正在工作。但是一旦我升级到 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从测试课中删除。但仍然出现异常。我猜该错误是由于两次交易造成的。但是仍然删除一个并没有解决错误。

在测试类中使用的注释下方,它具有调用执行批处理作业的方法的测试方法。我在测试类上使用了 Transactional,并且测试方法使用 SpringJUnit4ClassRunner 运行器运行。我也尝试过使用 SpringRunner。

@RunWith(SpringJUnit4ClassRunner.class) @DirtiesContext
@Transactional

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

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

我的spring核心版本是4.3.18。需要升级到5吗?帮我解决这个问题。提前致谢。

标签: javaspringspring-batch

解决方案


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

是的,Spring Batch v4 需要 Spring Framework v5。请参阅版本 4的新增功能部分。

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


推荐阅读