在Spring TransactionSynchronization接口中,它有方法(按执行顺序):
- beforeCommit
- beforeCompletion
- afterCommit: Can perform further operations right after the main transaction has successfully committed.
- afterCompletion
为什么Spring没有回滚方法,例如beforeRollback或afterRollback,但它只用于提交(beforeCommit和afterCommit)?这有必要吗?有人可以给我一些建议或解释一下吗?
如果我想继续进行主要交易成功回滚的进一步操作,例如通知消息或电子邮件,我应该在这种情况下做什么?
答案 0 :(得分:0)
@Override
public void afterCompletion(int status) {
if (status == TransactionSynchronization.STATUS_ROLLED_BACK) {
logger.trace("Rolled back...");
}
}
答案 1 :(得分:-1)
我可以问你为什么使用这个界面?
这用于负责管理事务生命周期的PlatformTransactionManager的回调。
Spring Transactions的“正常”使用是以编程方式利用@Transactional
注释,xml或TransactionTemplate / PlatformTransactionManager中的aop声明来设置事务范围,行为和可见性,如文档中所述 - {{3} }。
要管理回滚等的事务行为,您只需告诉spring在发生异常时该怎么做
public class Foo {
@Autowired public Service someService;
@Transactional(propagation = Propagation.REQUIRES_NEW,
noRollbackFor = {IOException.class})
public boolean bar(SomeObject someObject) throws IOException {
someService.doComplicatedThing(someObject.getValue());
}
}
这告诉PlatformTransactionManager
在命中foo()
方法时启动新TX,成功返回或IOException时提交,如果存在其他类型的异常则返回。这是它的天才 - 您不必担心使用getTransaction().isActive()
乱丢您的代码以及用于管理隔离的复杂检查。