spring 事务

Spring事务管理详解
本文详细介绍了Spring框架中的两种事务管理方式:声明式事务和编程式事务。声明式事务通过简单的注解即可实现,适用于大多数场景;编程式事务则提供了更细粒度的控制,适合需要复杂事务逻辑的情况。

大纲:

  1. 声明式事务
  2. 编程式事务

一、声明式事务

纳入spring事务管理只需要在方法或这类上@Transactional 就行了。

  1. 加在方法上表示这个方法纳入管理,加载类上表示整个类的方法纳入管理。方法和类上都声明则优先级顺序为方法>实现类>接口。
  2. 多数据源时@Transactional("DataSourceTransactionManager")注解中填写spring配置DataSourceTransactionManager的名称。
  3. @Transactional还可以指定隔离级别,超时等。
  4. 同类中yy方法直接调用xx,事务不生效。
  5. xx方法需要public权限。
  6. 抛出RuntimeException时生效,业务代码1没有编译时异常,可以生效,业务代码2有编译时异常,需要手动catch,手动回滚。
@Transactional
public void xx(){
  业务1;
try { 业务2; } catch (Exception e) { //回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } }

private void yy(){
  //事务无效
  xx();
}

 

二、编程式事务

PlatformTransactionManager

  1. DefaultTransactionDefinition指定超时,隔离级别等。
  2. 多数据源需要Qualifierspring指定配置DataSourceTransactionManager的名称。
  3. 声明式的不能做到每次分开提交回滚、控制粒度不如编程式的。例如在一个循环中,编程式的可以每次循环都新开事务提交或回滚。
    @Autowired
    @Qualifier("transactionManagerName")
    PlatformTransactionManager transactionManager;

    public void testx() {
        TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
        try {
            //业务
            transactionManager.commit(status);
        } catch (Exception e) {
            transactionManager.rollback(status);
            e.printStackTrace();
        }
    }

 

转载于:https://www.cnblogs.com/liuboyuan/p/8575994.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值