【发布时间】:2019-02-28 00:51:10
【问题描述】:
我有如下代码
@Test
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void testCallDb() {
rollbackThis();
commitThis();
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
@Commmit
public void commitThis() {
//do some work and commit
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
@Rollback
public void rollbackThis() {
//do some work and rollback
}
当我运行它时,它总是回滚,两种方法,即它不提交 commitThis() 方法数据。如果我将@Commit 放在testCallDb() 上,那么这两种方法都会被提交,包括我想要回滚的rollbackThis() 方法。
是否有任何解决方案,或者使用 Spring 注释(最好)或使用其他方法?
更新:
作为解决方案,我使用了@Huy 的建议,即从commitThis() 和rollbackThis() 中删除注释并将testCallDb() 的正文更改为:
rollbackThis();
TestTransaction.flagForRollback();
TestTransaction.end();
TestTransaction.start();
TestTransaction.flagForCommit();
commitThis();
【问题讨论】:
-
测试的重点是在运行第二个之前回滚第一个。
标签: spring spring-transactions spring-test