我有一个运行批处理作业的 Junit 测试用例。以前当我有 Spring Batch 版本 2.1.2 时它可以工作。但是一旦我升级到版本 4.1.1,我就会遇到异常
java.lang.IllegalStateException:在 JobRepository 中检测到现有事务。请修复此问题并重试(例如从客户端删除 @Transactional 注释)。
我尝试从测试类中删除@Transactional
。但仍然出现异常。我猜错误是由于两笔交易造成的。但删除一个仍然没有修复错误。
下面的注释在测试类中使用,它具有调用执行批处理作业的方法的测试方法。我已在测试类上使用 Transactional,并使用 SpringJUnit4ClassRunner 运行程序运行测试方法。我也尝试过使用SpringRunner。
@RunWith(SpringJUnit4ClassRunner.class) @DirtiesContext
@Transactional
该方法将从测试方法中调用。该方法启动了批处理作业。
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public Long startExportJob(){
我的spring核心版本是4.3.18。我需要升级到5吗? 帮我解决这个问题。提前致谢。
最佳答案
My spring core version is 4.3.18. Do I need to upgrade it to 5?
是的,Spring Batch v4 需要 Spring Framework v5。请参阅What's new版本 4 的部分。
v2.1 和 v4.1 之间进行了很多更改。我建议逐步升级(一次至少一个主要版本),否则您需要检查更改日志并查看可能与您的测试相关的内容。
关于java - Spring Batch从2.1.1升级到4.1.1版本后出现异常 "java.lang.IllegalStateException: Existing transaction detected in JobRepository.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54326747/