Spring事务回滚规则,是否只读,超时时间,事务失效

一:回滚规则

    默认情况下,事务只有遇到运行期异常(RuntimeExcertion的子类)以及 Error 时才会回滚,在遇到检查型(Checked Exception)异常时不会回滚。像 1/0,空指针这些是RuntimeException,而IOException 则算是 Checked Exception,换言之,默认情况下,如果发生IOException并不会导致事务回滚。如果我们希望发生IOException时也能触发事务回滚,那么可以按照如下方式配置:

java配置:

@Transactional(rollbackFor = I0Exception.class)public void handle2() {jdbcTemplate.update();accountService.handle1();
}

xml配置:

rollback-for="java.io.IOException"
<!--配置事务的通知--><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><!--配置事务的属性,name 表示哪些方法需要添加事务,可以使用通配符--><tx:method name="transfer*" isolation="SERIALIZABLE" propagation="REQUIRED"rollback-for="java.io.IOException"/><tx:method name="add*" isolation="SERIALIZABLE" propagation="REQUIRED"  rollback-for="java.io.IOException"/><tx:method name="delete*" isolation="SERIALIZABLE" propagation="REQUIRED"  rollback-for="java.io.IOException"/></tx:attributes></tx:advice>

还可以发生某些异常不回滚则:

java方式

rollbackFor 换成 noRollbackFor 

xml类似。。。

二:是否只读

    只读事务一般设置在查询方法上,但不是所有的查询方法仍需要只读事务,要看具体情况。
    一般来说,如果这个业务方法只有一个查询SQL,那么就没必要添加事务,强行添加最终效果适得其反。但是如果一个业务方法中有多个查询SQL,情况就不一样了:多个查询SQL,默认情况下,每个查询 SQL 都会开启一个独立的事务,这样,如果有并发操作修改了数据,那么多个查询 SQL 就会查到不一样的数据。此时,如果我们开启事务,并设置为只读事务,那么多个查询SQL将被置于同一个事务中,多条相同的 SQL 在该事务中执行将会获取到相同的查询结果。设置事务只读的方式如下: Java 配置:

Java配置

Transactional(readOnly = true)

xml配置

read-only="true"
<tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><!--配置事务的属性,name 表示哪些方法需要添加事务,可以使用通配符--><tx:method name="transfer*" isolation="SERIALIZABLE" propagation="REQUIRED"rollback-for="java.io.IOException"read-only="true"/></tx:attributes></tx:advice>

三:超时时间

    超时时间是说一个事务允许执行的最长时间,如果超过该时间限制但事务还没有完成,则自动回滚事务。事务超时时间配置方式如下(单位为秒)

Java 配置:

@Transactional(timeout =10)

xml配置

timeout="10"
<tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><!--配置事务的属性,name 表示哪些方法需要添加事务,可以使用通配符--><tx:method name="transfer*" isolation="SERIALIZABLE" propagation="REQUIRED"rollback-for="java.io.IOException"read-only="true"timeout="10"/></tx:attributes></tx:advice>

在TransactionDefinition中以int的值来表示超时时间,其单位是秒,默认值为-1。

四:事务失效

主要有这样几种情况

  • 异常被catch捕获了

  • 方法非public

  • 非运行时异常(只有配置了才会事务生效)

  • 数据库不支持事务
    数据库不支持事务,spring咋配置都没有用

  • 不是spring bean
    声明式事务主要是通过动态代理来处理事务的,如果你拿到手的UserService对象就是原原本本的UserService(如果自己new了一个UserService就是这种情况),那么事务代码在哪里?没有事务处理的代码,事务自然不会生效。

声明式事务的核心,就是动态代理生成的那个对象,没有用到那个对象,事务就没戏。

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

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

相关文章

JAVA面试——创建线程有几种方法?

1.继承Thread类&#xff1a;创建一个类&#xff0c;继承自 Thread 类&#xff0c;并重写 run() 方法来定义线程的执行逻辑。然后可以实例化这个类并调用 start() 方法来启动线程。 public class MyThread extends Thread {Overridepublic void run() {// 线程执行逻辑for (int…

Spring security之授权

前言 本篇为大家带来Spring security的授权&#xff0c;首先要理解一些概念&#xff0c;有关于&#xff1a;权限、角色、安全上下文、访问控制表达式、方法级安全性、访问决策管理器 一.授权的基本介绍 Spring Security 中的授权分为两种类型&#xff1a; 基于角色的授权&…

一篇文章带你搞定CTFMice基本操作

CTF比赛是在最短时间内拿到最多的flag&#xff0c;mice必须要有人做&#xff0c;或者一支战队必须留出一块时间专门写一些mice&#xff0c;web&#xff0c;pwn最后的一两道基本都会有难度&#xff0c;这时候就看mice的解题速度了&#xff01; 说实话&#xff0c;这是很大一块&…

MATLAB画球和圆柱

1. 画球 修改了一下MATLAB的得到球的坐标的函数&#xff1a; GetSpherePoint function [xx,yy,zz] GetSpherePoint(xCenter,yCenter,zCenter,r,N) % 在[xCenter,yCenter,zCenter]为球心画一个半径为r的球,N表示球有N*N个面&#xff0c;N越大球的面越密集 if nargin < 4 …

GO设计模式——19、中介者模式(行为型)

目录 中介者模式&#xff08;Mediator Pattern&#xff09; 中介者模式的核心角色&#xff1a; 优缺点 使用场景 注意事项 代码实现 中介者模式&#xff08;Mediator Pattern&#xff09; 中介者模式&#xff08;Mediator Pattern&#xff09;引入一个中介者对象&#xf…

【NR技术】 Inter-gNB-DU 条件切换或条件Pcell变更

1 引言 本文介绍Inter-gNB-DU 条件切换或条件Pcell更改过程。 2 Inter-gNB-DU 条件切换或条件pcell更改 此过程用于在NR操作期间&#xff0c;UE从一个gNB-DU移动到同一gNB-CU内的另一个gNB-DU&#xff0c;以进行有条件的切换或有条件的Pcell更改。图1显示了内部NR的gNB-DU间…

Android studio Android SDK下载安装

我们访问地址 https://developer.android.google.cn/studio?hlzh-cn 拉下来直接点击下载 然后来下来 勾选 然后点击下载 下载好之后 我们双击打开 点击下一步 确认上面的勾选 然后下一步 这里 我们选择一下安装目录 然后点击下一步 安装 安装完之后点击进行下一步 Fin…

导行电磁波从纵向场分量求其他方向分量的矩阵表示

导行电磁波从纵向场分量求解其他方向分量的矩阵表示 导行电磁波传播的特点 电磁波在均匀、线性、各向同性的空间中沿着 z z z轴传播&#xff0c;可用分离变量法将时间轴、 z z z轴与 x , y x,y x,y轴分离&#xff0c;电磁波的形式可表示为&#xff1a; E ⃗ E ⃗ ( x , y )…

ImageBind-LLM: Multi-modality Instruction Tuning 论文阅读笔记

ImageBind-LLM: Multi-modality Instruction Tuning 论文阅读笔记 Method 方法Bind NetworkRMSNorm的原理及与Layer Norm的对比 Related Word / Prior WorkLLaMA-Adapter 联系我们 本文主要基于LLaMA和ImageBind工作&#xff0c;结合多模态信息和文本指令来实现一系列任务。训练…

yarn : 无法将“yarn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。‘yarn‘ 不是内部或外部命令,也不是可运行的程序.解决方案

文章目录 报错截图介绍方法一方法二评论截图 报错截图 介绍 我的npm已经安装好了, 是可以运行npm -v 来查看版本的 这个时候报 yarn 不是内部或外部命令 相信你的npm也已经安装好了 我下面两个方法都进行了, 具体起作用的我也不知道是哪个, 都试试吧, 我成功了 注意尝试后关…

论文阅读——BLIP-2

BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models 1 模型 在预训练视觉模型和预训练大语言模型中间架起了一座桥梁。两阶段训练&#xff0c;视觉文本表示和视觉到语言生成学习。 Q-Former由两个转换器子模块组成&am…

Mybatis-TypeHandler类型转换器

文章目录 TypeHandler 接口TypeHandler 注册TypeHandler 查询别名管理总结 TypeHandler 接口 TypeHandler 这个接口 就是Mybatis的类型转换器 /*** author Clinton Begin*/ public interface TypeHandler<T> {// 在通过PreparedStatement为SQL语句绑定参数时&#xff0…

【12.22】转行小白历险记-算法01

不会算法的小白不是好小白&#xff0c;可恶还有什么可以难倒我这个美女的&#xff0c;不做花瓶第一天&#xff01; 一、长度最小的子数组 209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 1.思路 滑动窗口法&#xff1a;把数组的区间&#xff0c;假设成为两…

stm32项目(14)——基于stm32f103zet6的循迹避障小车

1.功能设计 stm32循迹避障小车&#xff0c;使用超声波测距&#xff0c;使用红外循迹模块追踪黑线&#xff0c;实现循迹功能。此外&#xff0c;还可以检测烟雾、火焰、人体、温湿度。温湿度显示在LCD屏幕上。检测到有人、有火焰、有烟雾时&#xff0c;蜂鸣器报警&#xff01; 功…

强化学习(五)-Deterministic Policy Gradient (DPG) 算法及公式推导

针对连续动作空间&#xff0c;策略函数没法预测出每个动作选择的概率。因此使用确定性策略梯度方法。 0 概览 1 actor输出确定动作2 模型目标&#xff1a; actor目标&#xff1a;使critic值最大 critic目标&#xff1a; 使TD error最大3 改进&#xff1a; 使用两个target 网络…

Ceph存储体系架构?

Ceph体系架构主要由RADOS和RADOS GW和RBD以及CephFS构成。 RADOS&#xff08;Reliable, Autonomic Distributed Object Store&#xff09;是Ceph的底层核心&#xff0c;RADOS本身也是分布式存储系统&#xff0c;CEPH所有的存储功能都是基于RADOS实现。RADOS由两个组件组成&…

【接口测试】JMeter调用JS文件实现RSA加密

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

Vue.js实战:构建现代单页应用程序(SPA)的实用指南

欢迎来到《Vue.js实战指南》&#xff01;本博客将深入探讨如何通过Vue.js构建现代单页应用程序&#xff08;SPA&#xff09;。无论你是初学者还是有一定经验的开发者&#xff0c;这里都有关键的实用指南&#xff0c;帮助你从概念到实际应用中构建强大的SPA。准备好迎接Vue.js的…

SQL分类

SQL分类 DDL 查询库 查询表 创建表 修改表 DML 添加数据 修改数据 删除数据 DQL 基本查询 条件查询 聚合函数 分组查询 排序查询 分页查询 执行顺序 DCL 管理用户 管理权限 数据类型 数值类型 字符串类型 日期类型

【Py/Java/C++三种语言OD2023C卷真题】20天拿下华为OD笔试之【模拟】2023C-结队编程【欧弟算法】全网注释最详细分类最全的华为OD真题题解

文章目录 题目描述与示例题目描述输入描述输出描述示例一输入输出说明 示例二输入输出说明 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 某部门计划通过结队编程来进行项目开发&#xff0c;已知该部门有 N 名员工…