Spring事务实现

2021-06-24  本文已影响0人  美美的苹果核

简介

编程式使用

这是spring事务的最基本使用方式,声明式事务也是在这个基础上进行扩展。

TransactionManager transactionManager = new DataSourceTransactionManager();
TransactionDefiniton td = new DefaultTransactionDefinition();
// transactionManager 是某一个具体的 PlatformTransactionManager实现类 的对象
TransactionStatus ts = transactionManager.getTransaction(td);
try {
    // 这里是需要进行事务处理的方法调用
} catch (Exception e) {
    transactionManager.rollback(ts);
    throw e;
}
transactionManager.commit(ts);

TransactionManager

PlatformTransactionManager 是其中一个事务抽象,包括 DataSourceTransactionManager 等各种事务的实现,是执行事务的基本单元,并通过 TransactionSynchronizationManager 保存事务的状态。

TransactionTemplate

对外提供的api封装,具体实现还是调用TransactionManager,可配置隔离级别和传播方式,核心方法是execute方法。

TransactionSynchronizationManager

存储 TransactionManager 操作过程中的事务状态和用于扩展的 TransactionSynchronization 集合,都是静态方法,随便用。

TransactionSynchronization

TransactionSynchronizationAdapter 实现了此接口,用于扩展事务生命周期的各个操作,可以通过 TransactionSynchronizationManager 的 registerSynchronization 方法添加多个同步器。

事务后执行业务方案

注解式使用

@TransactionalEventListener

事务事件处理器 ,简化扩展

ApplicationListenerMethodTransactionalAdapter

用于监听事务内发送(如:eventPublisher.publishEvent(new StandardMessageEvent(joinPoint)))的事件,如果事件在事务内,动态创建监听器(根据 @TransactionalEventListener 配置,创建通过 TransactionSynchronization 的生命周期处理事件的监听器),否则原样将事件传递下去。

@Transactional

事务的切点,指定拦截的方法,AnnotationTransactionAttributeSource 是注解对应的解析类。

事务传播

事务传播是Spring提供的,通过 AbstractPlatformTransactionManager 的 getTransaction 实现,配置的值(隔离级别和传播方式)通过 TransactionTemplate 传递进去。

上一篇 下一篇

猜你喜欢

热点阅读