我想知道这是否可行。这是我的第一个问题,如果我不完全遵循协议,请耐心等待。我能够使用事务模板回滚我的事务。但是现在我要做的是在标记为@before的方法中保存状态,然后在@after方法中将其回滚。
例如,这就是我之前所拥有的:
_transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus transactionStatus)
{
Object transactionStatusSavepoint = transactionStatus.createSavepoint();
//do some work
transactionStatus.rollbackToSavepoint(transactionStatusSavepoint);
}
});
这一切都运作良好。现在我想这样做:
@Before
public void beforeTest() {
_template.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
_transactionStatusSavepoint = _transactionStatus.createSavepoint();
}
});
@Test
public void foo(){//do some stuff}
@After
public void afterTest() {
_transactionStatus.rollbackToSavepoint(_transactionStatusSavepoint);
}
如果您不理解或想详细说明,请告诉我。 提前谢谢!
答案 0 :(得分:2)
doInTransactionWithoutResult完成后,交易状态无效,因此您无法在afterTest方法中使用它。
看起来你正在使用弹簧进行测试。 Spring带有测试运行器,可以在测试完成时回滚事务。