java - 异常“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吗?帮我解决这个问题。提前致谢。
解决方案
我的spring核心版本是4.3.18。需要升级到5吗?
是的,Spring Batch v4 需要 Spring Framework v5。请参阅版本 4的新增功能部分。
v2.1 和 v4.1 之间进行了很多更改。我建议逐步升级(一次至少一个主要版本),否则您需要检查更改日志并查看可能与您的测试相关的内容。
推荐阅读
- couchbase - 使用 2 个同步网关的自定义身份验证
- python - 使用 django 模型进行复杂查询
- assembly - 访问 MIPS 中十六进制数的最后两位
- javascript - 在反应中将事件处理程序添加到 iframe 中的特定类名
- python - 有没有办法同时使用 Openpyxl 和 Seaborn?(Python)
- python - 熊猫数据框分组和回归计算
- whitespace - 如何识别空白字符的特定字符?
- scala - 使用scala在spark-sql中的其他列检索最大日期组
- react-native - 图像未在 React Native 中上传到 PHP 服务器
- html - 多个表 - 添加新行