我有一个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吗? 帮助我解决这个问题。预先感谢。
答案 0 :(得分:1)
我的spring核心版本是4.3.18。我需要将其升级到5吗?
是的,Spring Batch v4需要Spring Framework v5。请参阅第4版的What's new部分。
在v2.1和v4.1之间进行了很多更改。我建议逐步升级(一次至少升级一个主要版本),否则,您需要检查更改日志并查看可能与测试有关的内容。