我有一些类似如下的代码
@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();
答案 0 :(得分:1)
从Spring Framework 4.1开始,您可以使用TestTransaction中的静态方法以编程方式与测试管理的事务进行交互。
希望对您有帮助。