spring 事务失效的几种场景
以下场景是基于mysql数据库,InnoDB的存储引擎。
一.没有添加@Transactional注解
二.方法声明是private或者static
三.没有抛出异常而是try catch了异常
下面这种情况,事务不会回滚
@Transactional
public void insertUser(String name){
try {
User user = new User();
user.setName(name);
userDao.insertUser(user);
//模拟抛异常
throw new RuntimeException();
} catch (RuntimeException e) {
e.printStackTrace();
}
}
四.异常类型不对
默认只对runtimeException的类型进行回滚,如果抛出Exception异常是不进行回滚的,如果想回滚要配置@Transactional(rollbackFor = Exception.class)
@Transactional
public void insertUser(String name) throws Exception {
User user = new User();
user.setName(name);
userDao.insertUser(user);
//模拟抛异常
throw new Exception();
}
五.自己调自己
下面这种情况,事务是不生效的,如果要生效,可以把this调用放到另外一个类,insertStu这个放另外一个类,这样可以这个方法有事务
public void insertUser(String name) {
User user = new User();
user.setName(name);
//没有事务,不会回滚,保存成功
userDao.insertUser(user);
insertStu(name);
}
@Transactional
public void insertStu(String name){
Stu stu = new Stu();
stu.setName(name);
//没有事务,保存会成功
stuDao.insertUser(stu);
throw new RuntimeException();
}
下面这种情况,事务是生效的,注意
@Transactional
public void insertUser(String name) {
User user = new User();
user.setName(name);
//有事务,会回滚,保存不成功
userDao.insertUser(user);
insertStu(name);
}
public void insertStu(String name){
Stu stu = new Stu();
stu.setName(name);
//有事务,会回滚,保存不成功
stuDao.insertUser(stu);
throw new RuntimeException();
}
六.没有配置正确的事务管理器
如果项目中是多数据源情况,要单独配置事务管理器。当引入jdbc依赖之后,Spring Boot会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager,
所以我们不需要任何额外配置就可以用@Transactional注解进行事务的使用。
spring 事务失效的几种场景的更多相关文章
- 聊聊spring事务失效的12种场景,太坑了
前言 对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了. 在某些业务场景下,如果一个请求中,需要同时写入多张表的数据.为了保证操作的原子性(要么同时成功,要么同时失败),避免数据 ...
- spring事务失效的12种场景
一 事务不生效 1.访问权限问题 java的访问权限主要有四种:private<default<protected<public. 把有某些事务方法,定义了错误的访问权限,就会导致事 ...
- Spring事务失效的2种情况
使用默认的事务处理方式 因为在java的设计中,它认为不继承RuntimeException的异常是”checkException”或普通异常,如IOException,这些异常在java语法中是要求 ...
- java面试记录二:spring加载流程、springmvc请求流程、spring事务失效、synchronized和volatile、JMM和JVM模型、二分查找的实现、垃圾收集器、控制台顺序打印ABC的三种线程实现
注:部分答案引用网络文章 简答题 1.Spring项目启动后的加载流程 (1)使用spring框架的web项目,在tomcat下,是根据web.xml来启动的.web.xml中负责配置启动spring ...
- Spring事务管理的四种方式(以银行转账为例)
Spring事务管理的四种方式(以银行转账为例) 一.事务的作用 将若干的数据库操作作为一个整体控制,一起成功或一起失败. 原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不 ...
- Spring事务失效的原因
http://blog.csdn.net/paincupid/article/details/51822599 Spring事务失效的原因 5种大的原因 如使用mysql且引擎是MyISAM,则事务会 ...
- 事务管理(下) 配置spring事务管理的几种方式(声明式事务)
配置spring事务管理的几种方式(声明式事务) 概要: Spring对编程式事务的支持与EJB有很大的区别.不像EJB和Java事务API(Java Transaction API, JTA)耦合在 ...
- Spring事务配置的五种方式(转发)
Spring事务配置的五种方式(原博客地址是http://www.blogjava.net/robbie/archive/2009/04/05/264003.html)挺好的,收藏转发 前段时间对Sp ...
- Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别
转: http://blog.csdn.net/it_man/article/details/5074371 Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之 ...
随机推荐
- Linux 三剑客之sed
目录 Linux 三剑客之sed 命令补充: sort命令 uniq命令 cut命令 tr命令 wc命令 三剑客 - sed 编辑模式: 定位分类: 实例如下: d模式--删除模式 p模式--打印 a ...
- LuoguP7869 「Wdoi-4」使用三个系统程度的能力 题解
Content 现在有一个转换后的文本文件,以一个长度为 \(n\) 的字符串表示.请判断这个文件是用哪一种写的,详情请返回题面. 数据范围:\(n\leqslant 10^5\).字符串里面至少有一 ...
- Python软件目录结构
目录组织方式 关于如何组织一个较好的Python工程目录结构,已经有一些得到了共识的目录结构.在Stackoverflow的这个问题上,能看到大家对Python目录结构的讨论. 这里面说的已经很好了, ...
- 【LeetCode】93. Restore IP Addresses 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 回溯法 日期 题目地址:https://leetco ...
- 如何改善win10录屏时声音降噪(消除杂音)
此文章是针对win10系统中安装Realtek声卡的麦克风出现杂音的设置办法 1. 打开win10的控制面板,找到"硬件和声音选项" 2. 进入"硬件和声音"选 ...
- 第十九个知识点:Shamir密钥交换场景
第十九个知识点:Shamir密钥交换场景 Shamir密钥交换场景是一个被Adi Shamir提出的算法.算法允许多方分割一个密码,例如一个密钥.当足够多的秘密结合起来,整个密钥就被计算出来了. 正式 ...
- Capstone CS5265规格书|CS5265参数|TYPEC转HDMI音视频转换拓展坞芯片
一.CS5265总概 Capstone CS5265 USB Type-C到HDMI转换器结合了USB Type-C输入接口和数字高清多媒体接口(HDMI)输出.嵌入式微控制器(MCU)基于工业标准8 ...
- Windows下SQL Server数据库的安装
由于工作需要出一版教程,记录一下安装过程,用到的数据库是SQL Server2014版本 下载地址为:SQL Server2014下载 提取码:6666 下载好安装包,首先右键,装载 装载完, 会有这 ...
- pod内执行kill -3 pid
1.使用logs命令监控输出 kubectl logs iothub2-iop-dm-replicaset-0 -n iot -f >> yuanqianqian.txt 2.在p ...
- SpringCloud创建项目父工程
1.说明 本文详解介绍Spring Cloud项目的父工程创建, 由于Spring Cloud项目下有很多模块组件, 需要先创建一个大的父工程项目, 然后在下面创建各个子工程模块. 2.创建父工程 这 ...