当前位置: 首页 > news >正文

SpringBoot 事务开发代码及注意事项

文章目录

  • 1. 编码
  • 2. @Transactional属性
    • 2.1 value
    • 2.2 propagation
    • 2.3 isolation
    • 2.4 timeout
    • 2.5 readOnly
    • 2.6 `rollbackFor`
    • 2.7 noRollbackFor
  • 3. 注意 :

1. 编码

在使用SpringBoot集成Mybatis完成事务操作时,底层其实还是jdbc的 DataSourceTransactionManager,并且在SpringBoot启动时自动进行配置,只要我们告诉SpringBoot我们将要使用事务,它就可以为我们自动配置。
只需要两步就可以完成 :

  1. 在启动类或某个配置类加上 @EnableTransactionManagement注解。

    // 1.在启动类上加:
    @SpringBootApplication
    @EnableTransactionManagement
    public class TestApplication {
        public static void main(String[] args) {
            SpringApplication.run(TestApplication.class, args);
        }
    }
    // 2.在配置类上加:
    @Configuration
    @EnableTransactionManagement
    public class TransactionManagerConfig {
        
    }
    
  2. 在需要开启事务的地方加上 @Transactional 注解

    可以加在类上,也可以加在方法上。

    // 加在类上时,默认所有方法使用事务。
    @Transactional
    public class xxx {
        public void add() {
    
        }
        public void delete() {
    
        }
        public void update() {
    
        }
    }
    
    

2. @Transactional属性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VYuAFQ7L-1661881776696)(https://xiaohetypora.oss-cn-shanghai.aliyuncs.com/QQ%E5%9B%BE%E7%89%8720220830235200.jpg)]

2.1 value

类型是String,当配置了多个事务管理器,使用该属性选择使用哪一个。

与transactionManager属性作用相同。

2.2 propagation

类型是枚举类,选择事务传播行为,默认值为propagation.REQUIRED。

属性如下表:

属性值作用
propagation.REQUIRED默认值,如果当前存在事务,则加入该事务;如果不存在则新建。
propagation.SUPPORTS如果当前存在事务,则加入该事务;如果不存在,则以非事务方式运行
propagation.MANDATORY如果当前存在事务,则加入该事务;如果不存在则抛出异常
propagation.REQUIRES_NEW重新创建一个新的事务,如果当前存在事务,暂停当前的事务
propagation.NOT_SUPPORTED以非事务的方式运行,如果当前存在事务,停止当前事务
propagation.NEVER以非事务的方式运行,如果当前存在事务,抛出异常
propagation.NESTED如果当前存在事务,则加入该事务;如果不存在则新建。

2.3 isolation

类型是枚举类,事物的隔离级别,默认值为 isolation.DEFAULT

属性如下图:

属性值作用
isolation.DEFAULT使用底层数据库的默认隔离级别,对于大多数数据库而言是READ_COMMITED
isolation.READ_COMMITED一个事务只能读取另一个事务已经提交的数据
isolation.READ_UNCOMMITED一个事务可以读取另一个事务修改但还未提交的数据
isolation.REPEATABLE_READ一个事务在进行多次重复查询操作时,忽略别的事务新增数据造成的影响
isolation.SERIALIZABLE所有事物依次执行(严重影响性能)

image-20220831005031040

2.4 timeout

设置事物的超时时间,默认值为 -1,如果超过该时间事务还未执行完毕,自动回滚事务。

2.5 readOnly

指定事务是否为只读事务,默认值为false;为了忽略哪些不需要事务的方法。

2.6 rollbackFor

重要且常用,指定触发什么异常时才会执行事务的回滚。可以指定多个。属性是Class对象数组

2.7 noRollbackFor

指定哪些异常抛出时不会进行事务回滚。

3. 注意 :

1、@Transactional 注解只被应用在 public 方法上,用在protected、private 上时不会报错,单没用。

2、默认情况下,只有来自外部的调用才会被aop捕获,即:类内部方法互相调用不会引起事务行为。

相关文章:

  • onnx: step = 1 is currently not supported
  • webpack原理篇(六十五):实战开发一个压缩构建资源为zip包的插件
  • 数学建模学习(97):花授粉算法(FPA)寻优
  • 鲈鱼的面试题库+答案
  • CREO:CREO软件之零件【工具(调查/模型意图/实用工具)】、【视图(可见性/方向/模型显示/显示/窗口)】的简介及其使用方法(图文教程)之详细攻略
  • 【单细胞高级绘图】09.细胞通讯_两组比较_连线图
  • Tensorflow笔记——基于Mnist数据集图片分类的神经网络
  • 情侣积分微信小程序零基础开发教程(附代码及开发指南)
  • 为什么重写equals方法必须也要重写hashCode方法
  • 只要十分钟!带你了解Redis Cluster
  • CREO:CREO软件之零件【造型】样式栏之操作、平面、曲线、曲面、分析、优先选项的简介及其使用方法(图文教程)之详细攻略
  • app毕业设计开题报告基于Uniapp实现的美食餐厅订单点餐APP
  • 基于51单片机十字路口交通灯_5s黄灯闪烁
  • Java并发 | 13.[设计模式] 两阶段终止线程
  • 一次服务器被入侵的处理过程分享
  • 【comparator, comparable】小总结
  • centos安装java运行环境jdk+tomcat
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • JavaScript中的对象个人分享
  • Java小白进阶笔记(3)-初级面向对象
  • Joomla 2.x, 3.x useful code cheatsheet
  • Js基础——数据类型之Null和Undefined
  • MySQL数据库运维之数据恢复
  • win10下安装mysql5.7
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 记一次删除Git记录中的大文件的过程
  • 那些年我们用过的显示性能指标
  • 使用API自动生成工具优化前端工作流
  • 详解NodeJs流之一
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 最近的计划
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (七)理解angular中的module和injector,即依赖注入
  • (十六)串口UART
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)Linux Shell编程——输入输出重定向
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转) Face-Resources
  • *** 2003
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET CORE 第一节 创建基本的 asp.net core
  • .Net面试题4
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @RequestBody与@ResponseBody的使用
  • [BetterExplained]书写是为了更好的思考(转载)
  • [BZOJ4010]菜肴制作
  • [ES-5.6.12] x-pack ssl