Spring事务扩展机制——@Transactional

在进行数据库操作的时候,如果需要多个操作要么一起成功,要么一起失败那么就需要使用事务操作了。使用 Spring 框架只需要在方法上添加 @Transactional 注解这个方法就具有事务特性了。而且 Spring 也事务操作给开发者提供了很方便的扩展。

Spring事务扩展机制——@Transactional_第1张图片

1、TransactionSynchronizationManager

操作多个方法 Spring 是如何来进行事务处理的呢?Spring 对于事务的管理都是基于 TransactionSynchronizationManager,下面我们就来简单的分析一下这个类。

TransactionSynchronizationManager.java


 private static final ThreadLocal> resources =
            new NamedThreadLocal>("Transactional resources");

    private static final ThreadLocal> synchronizations =
            new NamedThreadLocal>("Transaction synchronizations");

    private static final ThreadLocal currentTransactionName =
            new NamedThreadLocal("Current transaction name");

    private static final ThreadLocal currentTransactionReadOnly =
            new NamedThreadLocal("Current transaction read-only status");

    private static final ThreadLocal currentTransactionIsolationLevel =
            new NamedThreadLocal("Current transaction isolation level");

    private static final ThreadLocal actualTransactionActive =
            new NamedThreadLocal("Actual transaction active");

这个对象里面通过 ThreadLocal 保存了线程需要状态以及资源对象。

  • resources:保存连接资源,因为一个方法里面可能包含两个事务(比如事务传播特性为:TransactionDefinition#PROPAGATION_REQUIRES_NEW),所以就用 Map 来保存资源.

  • synchronizations在进行数据库操作的时候,如果需要多个操作要么一起

你可能感兴趣的:(Java,程序员,Spring,spring,java,postman)