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

Spring事务和事务传播机制(下)

        我们上一篇文章学习了 @Transactional 的基本使用。接下来我们学习 @Transactional 注解的使用细节。 @Transactional 注解当中有下面三个常见属性:

1、rollbackFor:异常回滚属性。指定能够触发事务回滚的异常类型。可以指定多个异常类型

2、IsoIation:事务的隔离级别。默认值为 IsoIation.DEFAULT。

3、propagation:事务的传播机制。默认值为:Propagation.REQUIRED

1. rollbackFor

        @Transactional 默认只在遇到运行时异常和Error时才会回滚,非运行时异常不回滚(即Exception的子类中,除了 RuntimeException 及其子类,都不回滚)。继承关系图如下:

        如下代码,我们把异常修改如下:

   @Transactional@RequestMapping("/r2")public String r2(String userName, String password) throws IOException {Integer result = userService.insertUser(userName,password);log.info("数据插入成功, result:"+result);if (true){throw new IOException();  //事务提交}return "注册成功";}

         浏览器访问http://127.0.0.1:8085/trans/r2?userName=wangyi&&password=111111,页面如下所示:

        数据库却显示王奕的信息添加成功;

        日志信息显示虽然发生异常了,但是信息却提交成功了;所以如果我们需要所有异常都回滚,需要来配置 @Transactional 注解当中的 rollbackFor属性,通过 rollbackFor 这个属性指定出现何种异常类型时,事务才会进行回滚

        在@transactional注解中添加rollbackfor属性,代码如下:

@Transactional(rollbackFor = {Exception.class})@RequestMapping("/r2")public String r2(String userName, String password) throws IOException {Integer result = userService.insertUser(userName,password);log.info("数据插入成功, result:"+result);if (true){throw new IOException();  //事务提交}return "注册成功";}

        浏览器访问:http://127.0.0.1:8085/trans/r2?userName=zhoushiyu&&password=111111,发现事务没有被提交而是被进行回滚了;即周诗雨的数据没有成功的提交到数据库中;

结论:

1、在 Spring 的事务管理中,默认只在遇到运行时异常 RuntimeException 和 Error 时才会回滚。

2、如果需要回滚指定类型的异常,可以通过 rollbackFor 属性来指定

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • RK3588 系列之4—入门级完整demo项目
  • 银行创新技术应用系统概览(一)
  • linux基础IO——动静态库——实现与应用学习、原理深入详解
  • 【C语言可变参数函数的使用与原理分析】
  • 搭建VUE+VScode+elementUI环境遇到的问题
  • 【每日一题】【平衡树】【__gnu_pbds :: tree】小红的中位数 牛客周赛 Round 29 D题 C++
  • Rust: Web框架Axum和Rest Client协同测试
  • 常见概念 -- 非线性效应
  • FPGA随记——8B/10B编码
  • 倍福——ADS协议解析及C语言读写库
  • 2024年6月第2套英语四级真题PDF
  • 第二章 深信服超融合测试历程第二天
  • 【计算机视觉前沿研究 热点 顶会】ECCV 2024中Mamba有关的论文
  • macOS系统介绍与特点
  • Oracle(106)如何实现透明数据加密?
  • [译] React v16.8: 含有Hooks的版本
  • Android 控件背景颜色处理
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • django开发-定时任务的使用
  • GraphQL学习过程应该是这样的
  • JS题目及答案整理
  • Laravel Mix运行时关于es2015报错解决方案
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • node.js
  • socket.io+express实现聊天室的思考(三)
  • vue:响应原理
  • Vue实战(四)登录/注册页的实现
  • win10下安装mysql5.7
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 关于Flux,Vuex,Redux的思考
  • 关于List、List?、ListObject的区别
  • 前端代码风格自动化系列(二)之Commitlint
  • 如何进阶一名有竞争力的程序员?
  • 使用docker-compose进行多节点部署
  • 想使用 MongoDB ,你应该了解这8个方面!
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • ​浅谈 Linux 中的 core dump 分析方法
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #NOIP 2014# day.2 T2 寻找道路
  • #控制台大学课堂点名问题_课堂随机点名
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (MATLAB)第五章-矩阵运算
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (八十八)VFL语言初步 - 实现布局
  • (二)pulsar安装在独立的docker中,python测试
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四) Graphivz 颜色选择
  • (算法)区间调度问题