美文网首页
Spring-编程式事务管理

Spring-编程式事务管理

作者: 夏与清风 | 来源:发表于2019-08-20 23:40 被阅读0次

spring框架提供了两种编程式事务管理方式:

  • 使用TransactionTemplate
  • 直接使用PlatformTransactionManager实现
1、TransactionTemplate

TransactionTemplate采用与其他spring模板相同的方法,它使用一种回调方法,使应用程序代码可以处理获取和释放事务资源,让开发人员更加专注于业务逻辑。

public class SimpleService implements Service {
  private final TransactionTemplate transactionTemplate;
  public SimpleService(PlatformTransactionManager manager) {
    Assert.notNull(manager,"the 'manager' argument must not be null");
    this.transactionTemplate = new TransactionTemplate(manager);
  }

  public Object method1() {
    return transactionTemplate.execute(new TransactionCallback() {
      public Object doInTransaction(TransactionStatus status) {
        updateOper1();
        return updateOper2();
      }
    });
  }
}

<bean id="sharedTransactionTemplate" 
  class="org.springframework.transaction.support.TransactionTemplate">
  <property name="isolationLevelName" value="ISOLATION_READ_UNCOMMITTED"/>
  <property name="timeout" value="30"/>
</bean>
2、PlatformTransactionManager

也可以直接使用org.springframework.transaction.PlatformTransactionManager来管理事务,只需通过bean引用将正在使用的PlatformTransactionManager的实现传递给bean。然后使用TransactionDefinition和TransactionStatus对象来启动、回滚和提交事务。

DefaultTransactionDefinition dtf = new DefaultTransactionDefinition();
dtf.setName("txName");
dtf.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = txManager.getTransaction(dtf);
try {
  //...
} catch(MyException ex) {
  txManager.rollback(status);
  throw ex;
}
txManager.commit(status);

如果应用中只有很少量的事务操作,编程式事务管理通常是很好的选择。如果应用程序有大量的事务操作,则声明式事务管理通常是最优选择。它使事务不受业务逻辑的影响,并且在配置上也很简单。
spring4.2开始,事件的监听器可以被绑定到事务的某个阶段。注册常规的事件监听器是通过@EventListener注解完成的。如果要将其绑定到特定的事务中,可以使用@TransactionEventListener注解。当这样做时,默认情况下,监听器将被绑定到事务的提交阶段。

@Component
public class MyComponent {
  @TransactionEventListener
  public void handleOrderCreatedEvent(CreationEvent<Order> creationEvent) {
    //...
  }
}

@TransactionEventListener注解公开了一个阶段属性,允许自定义监听器绑定到事务的某个阶段,包括BEFORE_COMMIT 、AFTER_COMMIT(默认)、AFTER_ROLLBACK、AFTER_COMPLETION。
如果没有事务正在运行,则不会调用监听器。可以通过将注解的fallbackExecution属性设置为true来覆盖该行为。

--参考文献《Srping5开发大全》

相关文章

  • Spring-编程式事务管理

    spring框架提供了两种编程式事务管理方式: 使用TransactionTemplate 直接使用Platfor...

  • spring事务管理

    spring支持编程式事务管理和声明式事务管理两种方式。 编程式事务管理使用TransactionTemplate...

  • Spring-事务机制

    一、Spring事务 事务管理概述 Spring事务管理分为编程式事务管理和声明式事务管理两种 编程式事务:允许用...

  • Spring事务管理方式

    编程式事务管理声明式事务管理

  • 事务管理

    编程式事务管理: 声明式事务管理:

  • spring支持事务管理的两种方式

    spring支持编程式事务管理和声明式事务管理两种方式。 1、编程式事务管理使用TransactionTempla...

  • JPA和事务管理

    1 事务 1.1 事务管理方式 spring支持编程式事务管理和声明式事务管理两种方式。 编程式事务管理使用Tra...

  • Spring声明式事务管理之一:五大属性分析

    1.Spring事务管理概述 Spring事务管理分为编程式事务管理和声明式事务管理两种。编程式事务允许用户在实现...

  • Spring事务的种类

    Spring事务的种类: spring支持编程式事务管理和声明式事务管理两种方式: ①编程式事务管理使用Trans...

  • Spring事物详解

    管理两种方式 spring支持编程式事务管理和声明式事务管理两种方式。 编程式事务管理使用TransactionT...

网友评论

      本文标题:Spring-编程式事务管理

      本文链接:https://www.haomeiwen.com/subject/hvwijctx.html