java - Spring Batch从2.1.1升级到4.1.1版本后出现异常 "java.lang.IllegalStateException: Existing transaction detected in JobRepository."

标签 java spring spring-batch

我有一个运行批处理作业的 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/

相关文章:

java - Spring - 从 jar 文件使用/加载上下文文件

java - 带有java配置的Spring Batch

spring - 配置数据源失败 : 'url' attribute is not specified and no embedded datasource could be configured

java - 如何将时间从 GMT 转换为 EST

java - 通过 Hibernate 注解创建外键关系的问题

java - 如何确保 spring boot 中方法执行的原子性?

java - Maven/Spring : AopNamespaceUtils NoSuchMethod Error

java - Spring Batch Admin,无法替换占位符 'batch.business.schema.script'

java - 如何检测不同类型的PDF

java - 如何将以下代码转换为Java 8 Stream?