首页 > 其他分享 >Spring 事务梳理

Spring 事务梳理

时间:2023-03-04 12:56:20浏览次数:53  
标签:回滚 管理器 Spring 事务 teacher 异常 梳理

1. 事务介绍

将一组操作封装成一个执行单元,要么全部成功,要么全部失败。当执行某个操作,例如转账操作时(分为先将钱从个人账户扣除和将他人账户新增两个操作),如果这两个操作不能同时成功或者失败,那么就会出现财产问题。事务就可以很好的解决这个问题。

事务的概念起源于数据库,Spring中事务也是通过数据库事务实现。事务具备四大特性,原子性,一致性,隔离性,持久性,自身的单元之间具备不可分割的特性。事务的具体内容会在数据库事务文章中进行介绍。

2. Spring 事务如何使用

Spring 中的事务操作分为两类:

  • 手动操作事务
  • 声明式自动提交事务

2.1 手动操作事务

Spring 手动操作事务分为三个步骤:

  1. 开启事务(获取事务)
  2. 提交事务
  3. 回滚事务

SpringBoot 内置了两个对象,可以用来处理事务:

JDBC 事务管理器 DataSourceTransactionManager 用来获取事务、提交事务和回滚事务。

TransactionDefinition 是事务的属性,在获取事务的时候需要将 TransactionDefinition 传递进去从而获得一个事务 TransactionStatus。

public void methodTest(){
        // 开启事务
        DefaultTransactionDefinition defaultTransactionDefinition = new DefaultTransactionDefinition();
        // 事务传播行为
        defaultTransactionDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
        // 设置
        TransactionStatus status = transactionManager.getTransaction(defaultTransactionDefinition);
        try {
            // TODO 处理我们的业务逻辑代码......
            Teacher teacher = new Teacher();
            teacher.setTName("test");
            teacher.setTId(22);
            teacherMapper.insert(teacher);
//            int i = 1/0;
            // 没有异常便手动提交事务
            transactionManager.commit(status);
        } catch (Exception e) {
            // 有异常便回滚事务
            transactionManager.rollback(status);
        }
    }

 2.2 Spring 声明式事务

声明式事务的实现相较于手动实现要简单很多,只需要在需要添加事务的方法上加上 @Transactional 注解就可以,无需手动开启事务和提交事务,进入方法时会自动开启事务,方法执行完成会自动提交事务,如果中途发生了没有处理的异常就会自动回滚事务。

@Transactional(propagation = Propagation.REQUIRED)
public void methodB( int tIdm, String name) {
    Teacher teacher = new Teacher();
    teacher.setTName(name);
    teacher.setTId(tIdm);
    teacherMapper.insert(teacher);
}

3. @Transactional 注解介绍

3.1 @Transactional 作用范围

@Fransactional 可以用来修饰方法或类:

  • 修饰方法时:表示当前的方法开启事务,需要注意只能应用在 public 方法上。
  • 修饰类时:表示当前该类下面的所有被 public 修饰的方法都开启事务。

3.2 @Transactional 参数说明

参数

作用

value

当配置了多个事务管理器时,可以使用该属性指定选择哪个事务管理器。

transactionManager

当配置了多个事务管理器时,可以使用该属性指定选择哪个事务管理器。

propagation

事务的传播行为,默认值为 Propagation.REQUIRED。

isolation

事务的隔离级别,默认值为 Isolation.DEFAULT。

timeout

事务的超时时间,默认值为-1(表示没有超时时间)。如果超过该超时时间显示但事务还没有完成,则自动回滚事务

readOnly

指定事务是否为只读事务,默认值为 false。为了忽略那些不需要事务的方法,比如读取数据,可以设置为 true。

rollbackFor

用于指定能够被触发事务回滚的异常类型,可以指定多个异常类型。

rollbackForClassName

用于指定能够被触发事务回滚的异常类型,可以指定多个异常类型。

noRollbackFor

抛出异常的类型,不回滚事务,也可以指定多个异常类型。

noRollbackForClassName

抛出异常的类型,不回滚事务,也可以指定多个异常类型。

 

参考:

https://blog.csdn.net/weixin_51367845/article/details/126216621

https://baijiahao.baidu.com/s?id=1699740038345003849&wfr=spider&for=pc

https://blog.csdn.net/zxl646801924/article/details/120786005

 

标签:回滚,管理器,Spring,事务,teacher,异常,梳理
From: https://www.cnblogs.com/hungryquiter/p/17178099.html

相关文章

  • springcloud-openfeign调用远程服务
    openfeign是springcloud的子组件,使用restful方式请求服务,声明式风格。前提准备,一个调用方member,一个被调用方coupon,一个nacos注册中心,调用方和被调用方需先完成服务注册。......
  • Spring Boot @Scheduled 是同步还是异步,单线程还是多线程?
    @schedule刚开始用的时候回遇到一些坑,主要就是他的同步、异步、多线程的配置问题,这篇文章介绍了@schedule的使用方法,读者遇到问题时可以参考下。1.问题@schedule注解默......
  • springboot接入nacos注册中心
    1,引入依赖,所有模块都要用到,多模块里可以将依赖放到父模块或者公用模块<dependency><groupId>com.alibaba.cloud</groupId><artifactId......
  • 20_Spring_零XML事务控制
    ​ 创建配置类 packagecom.msb.config;importcom.alibaba.druid.pool.DruidDataSource;importorg.springframework.beans.factory.annotation.Value;importor......
  • 20_Spring_零XML事务控制
    ​ 创建配置类 packagecom.msb.config;importcom.alibaba.druid.pool.DruidDataSource;importorg.springframework.beans.factory.annotation.Value;importor......
  • 17_Spring_事务环境搭建
     通过张三给李四转账案例演示事务的控制1数据库中准备表格applicationContext.xmljdbc.properties见上节课2项目中准备实体类 packagecom.msb.pojo;importlombok.......
  • 17_Spring_事务环境搭建
     通过张三给李四转账案例演示事务的控制1数据库中准备表格applicationContext.xmljdbc.properties见上节课2项目中准备实体类 packagecom.msb.pojo;importlombok.......
  • 20_Spring_零XML事务控制
     创建配置类 packagecom.msb.config;importcom.alibaba.druid.pool.DruidDataSource;importorg.springframework.beans.factory.annotation.Value;importorg.springf......
  • 20_Spring_零XML事务控制
     创建配置类 packagecom.msb.config;importcom.alibaba.druid.pool.DruidDataSource;importorg.springframework.beans.factory.annotation.Value;importorg.springf......
  • 17_Spring_事务环境搭建
    ​ 通过张三给李四转账案例演示事务的控制1数据库中准备表格applicationContext.xmljdbc.properties见上节课2项目中准备实体类 packagecom.msb.pojo;imp......