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

news2024/9/27 7:25:17

        我们上一篇文章学习了 @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 属性来指定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2109870.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开学季好物狂欢,这些神仙好物让你开学季事半功倍!

随着秋风送爽,开学季再次悄然而至。对于即将迎接新学期的学生们来说,这不仅仅是一个新起点,也是准备全新装备、挑战更高学习效率的好时机。在这个特殊的时节,我们特别为大家策划了一场“开学季好物狂欢”,精选了一系列…

数字人直播防封技巧升级!头部源码厂商如何实现7*24小时无间断直播?

当前,许多用户在使用数字人直播的过程中都遇到了直播间违规和账号被封两大问题,并因此蒙受了一定的损失。在此背景下,不少有计划引入数字人直播的企业和搭建数字人直播系统的创业者也开始有了犹豫。为了让大家能够更放心地入局,本…

Linux之MySQL日志

前言 数据库就像一个庞大的图书馆,而日志则是记录这个图书馆内每一本书的目录。正如在图书馆中找到特定书籍一样,数据库日志帮助我们追溯数据的变更、定位问题和还原状态。 在MySQL中,日志是非常重要的一个组成部分,它记录了数据…

创客匠人对话:如何让客户主动为你付费?北大教授发售秘籍大公开

老蒋创客圈第65期对话标杆直播连麦,我们邀请到【YD世界人才创造社】平台创始人白钰玮老师。为我们分享“家庭教育赛道如何创新模式,单场发售实现高创收?”,深度剖析如何去提升自己的核心竞争力?如何提升个人影响力&…

引领AI PC浪潮,Arm人工智能创新应用大赛火热报名中

AI PC,即搭载人工智能技术的个人电脑,正成为个人电脑市场的新宠儿。而正在如火如荼进行中的 Arm人工智能创新应用大赛,则为敏锐的开发者探索 AI PC 应用开发掘金之路提供了平台。 点击报名 挑战10万奖金池 AI PC 增长强劲,年出货…

2024跨境旺季营销:多渠道广告覆盖中,哪些平台是首选?

跨境电商的旺季即将来临,对于卖家们来说,如何进行有效的营销推广至关重要。在多渠道广告覆盖的策略下,选择合适的平台成为关键。那么,哪些平台是跨境旺季营销的首选呢? 一、社交媒体平台 1、Instagram 以图片和短视频…

易保全出席人工智能应用场景高峰论坛,发布AI-数据资产管理平台2.0应用成果

2024年9月5日,由上海合作组织国家多功能经贸平台、重庆市科技发展基金会指导,重庆市渝中区商务委员会等相关部门主办、华智未来(重庆)科技有限公司承办,重庆民营经济国际合作商会协办的“智驭未来创想无界人工智能应用场景高峰论坛暨成果发布…

使用 nuxi init 创建全新 Nuxt 项目

title: 使用 nuxi init 创建全新 Nuxt 项目 date: 2024/9/6 updated: 2024/9/6 author: cmdragon excerpt: 摘要:本文介绍了如何使用nuxi init命令创建全新的Nuxt.js项目,包括安装所需环境、命令使用方法、指定模板、强制克隆、启动开发服务器等步骤,并提供了完整的项目初…

DAY87 APP 攻防-安卓逆向篇Smail 语法反编译签名重打包Activity 周期Hook 模块

1、APK 逆向-数据修改-结构&格式 2、APK 逆向-逻辑修改-Smail 语法 3、APK 逆向-视图修改-Activity&Xml #章节点: 1、APP 资产-内在提取&外在抓包 2、APP 逆向-反编译&删验证&重打包 3、APP 安全-存储&服务&组件&注册等 演示案例&a…

RasberryPi 3B树莓派基本配置

RaspberryPi 3B树莓派基本配置 文章目录 RaspberryPi 3B树莓派基本配置一、准备工作1.1 硬件准备:1.1.1 树莓派和电源适配器:1.1.2 USB转TTL模块:1.1.3 读卡器和TF卡: 1.2 软件准备:1.2.1 下载 Raspberry Pi OS&#x…

SpringMvc后续3

返回值问题 ModelAndView返回 字符串返回 转发和重定向 默认返回页面是转发效果 如果需要重定向,在返回页面的时候,追加redirect:,后边需要追加视图后缀 Ajax返回 控制层 jsp文件 导入json包 Session问题

案例-上海某科技公司:监控易7.0重塑服务器监控模式

在上海这座充满创新与活力的城市中,科技型企业如雨后春笋般涌现,而上海某科技发展有限公司(以下简称“该公司”)便是其中的佼佼者。随着业务的蓬勃发展和IT环境的日益复杂,服务器作为业务运行的核心,其稳定…

2024全国大学省数学建模竞赛A题-原创参考论文(部分+第一问代码)

一问题重述 1.1 问题背景 "板凳龙",又称"盘龙",是浙闽地区的传统地方民俗文化活动。这种独特的表演艺术形式融合了中国传统龙舞的精髓和地方特色,展现了人们对美好生活的向往和对传统文化的传承。 在板凳龙表演中&am…

批量文件编码转换用python实现的utf8转gb2312,vscode设置特殊文件的默认打开编码

批量文件编码转换用python实现的utf8转gb2312, 任意编码之间的相互转换都是可以的.改一下下面的参数即可 convert.py文件内容如下 import os import glob import chardet#检测文件编码类型 def detect_file_encoding(file_path):with open(file_path, rb) as f:data f.read(…

InternVL-2B尝试

以最新的官方文档为准:https://internvl.readthedocs.io/en/latest/get_started/installation.html 一、环境配置 a. 下载InternVL完整的repo(无权重,空间占的不大) git clone https://github.com/OpenGVLab/InternVL.git b. …

Shopee 9.9大促活动定档,下半年首个大促你报名了吗?

官方数据显示,2023年9.9大促期间,仅活动开始后的两个小时内,Shopee的跨境订单量就同比增长了12倍。而去年12.12大促期间,活动开始两小时内,Shopee的跨境订单量增长到了平时的17倍,Shopee Mall的订单量激增了…

iOS——方法交换Method Swizzing

什么是方法交换 Method Swizzing是发生在运行时的,主要用于在运行时将两个Method进行交换,我们可以将Method Swizzling代码写到任何地方,但是只有在这段Method Swilzzling代码执行完毕之后互换才起作用。 利用Objective-C Runtimee的动态绑定…

游戏录屏掉帧怎么办?有什么录屏软件推荐吗?

对于广大游戏爱好者来说,录制游戏精彩瞬间、分享攻略或制作教程已经成为一种常态。然而,在录屏过程中,不少玩家都会遇到掉帧的问题,这不仅影响了视频的流畅度,也大大降低了观看体验。那么,面对游戏录屏掉帧…

Linux学习之路 -- 信号的处理

前面介绍了信号的保存与产生的基本原理,下面介绍一下信号处理的相关知识。 1、信号何时被处理? 前面我们提到,信号在被进程接受后,不一定会被马上处理,而是要等到合适的时机才会被进程处理。而这个合适的时机其实就是…

Ubuntu22.04版本左右,开机自动启动脚本

Ubuntu22.04版本左右,开机自动启动脚本 1. 新增/lib/systemd/system/rc-local.service中[Install]内容 vim /lib/systemd/system/rc-local.service 按 i 进入插入模式后,新增内容如下: [Install] WantedBymulti-user.target Aliasrc-local.…