Spring事务生命周期
- Spring事务
- 事务生命周期 接口 TransactionSynchronization
- @TransactionalEventListener(另一种监听事务周期的方式)
Spring事务
Spring对JDBC事务做了封装,使其易于使用。主要分为声明式事务和编程式事务。
- @Transactional(rollbackFor = Exception.class)
- TransactionTemplate
事务生命周期 接口 TransactionSynchronization
通常我们可以在开启事务后,通过TransactionSynchronizationManager#registerSynchronization 方法注册自定义的事务周期函数。
// 伪代码
//开启事务
TransactionSynchronizationManager.registerSynchronization(registerSynchronization)
// 提交事务 or 回滚事务
对应的事务生命周期会调用自定义registerSynchronization对应的回调函数。
所有事务状态均保存在ThreadLocal中,因此事务相关的逻辑注意跨线程。
@TransactionalEventListener(另一种监听事务周期的方式)
@TransactionalEventListener 可以在事务的指定阶段监听事务中发出的自定义事件。
可以监听的阶段
- BEFORE_COMMIT,
- AFTER_COMMIT,
- AFTER_ROLLBACK,
- AFTER_COMPLETION
// 发布事件
// 事务开启
applicationContext.publishEvent(customEventevent);
// 监听事件
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT, classes = CustomEvent.class)
public void handleCustomEvent(CustomEventevent) {// 在特定的事务阶段调用
}