事务失效的八种情况!!!!

@EnableAspectJAutoProxy(exposeProxy = true),开启AOP(面向切面编程)代理,并允许通过AopContext类暴露当前代理对象。这样,你可以在任何地方获取到当前代理对象,以便进行一些特殊的操作 (应用与第二种情况)
@EnableTransactionManagement 
开启事务支持(只要你要开启事务就要在启动类上加上这个注解)

一、非publi修饰的方法。

/*** 私有方法上的注解,不生效(因私有方法Spring扫描不到该方法,所以无法生成代理)*/
@Transactional
private boolean test() {//test code
}

二、类内部访问。

类内部非直接访问带注解标记的方法 B,而是通过类普通方法 A,然后由 A 调用 B。 自己玩自己

注解为什么不生效:方法A为普通方法,通过普通方法A调用方法B时并不能通过代理对方法B进行增强,所以也就导致方法B上的注解不生效。(AOP/增强 and 代理)

@Service
public class Demo {public void A() {this.B();}//注解不生效@Transactionalpublic void B() {......}
}

生效方法:1.在启动类上加上两个注解:@EnableAspectJAutoProxy(exposeProxy = true)
                                                                @EnableTransactionManagement

@SpringBootApplication
@EnableAspectJAutoProxy(exposeProxy = true)
@EnableTransactionManagement
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}}

2.然后通过动态代理调用B方法。

@Service
public class Demo {public void A() {this.B();//通过代理工厂调用保存方法PoMasterService proxy = (PoMasterService) AopContext.currentProxy();proxy.B();}//注解生效@Transactionalpublic void B() {......}
}

三、数据库不支持事务

MySQL中,MyISAM引擎不支持事物,InnoDB 支持事物

四、异常类型不匹配

@Transactional 注解默认只处理运行时异常( RuntimeException 和 error),而不会处理受检异常( Exception 的子类)。当抛出未被捕获的运行时异常时,Spring 会触发事务回滚操作,将之前的操作撤销;而对于未被捕获的受检异常,Spring 不会触发事务回滚操作。如果需要处理受检异常并触发事务回滚,可以通过 rollbackFor 和 noRollbackFor 属性来指定需要回滚或不需要回滚的异常类型。

/*** 非运行异常,且没有通过 rollbackFor 指定抛出的异常,不生效** @param id* @return* @throws Exception*/@Transactionalpublic void insertAll(PoMaster master) throws Exception {poMasterDao.insert(master);if(1 == 1){throw new Exception("测试异常");}poItemDao.insertList(master.getItems());}

五、传播属性设置问题

propagation属性错误

@Transactional默认的事务传播机制是:REQUIRED,若指定成了NOT_SUPPORTED、NEVER事务传播机制,则事物不生效,如:

@Transactional(propagation = Propagation.NOT_SUPPORTED)

六、捕获异常未抛出

//注解不生效
@Transactional
public void A(){try{......}catch(Exception e){// 未抛异常}
}

七、Bean没有纳入Spring IOC容器管理

没有将类注入IOC中,该类没被Spring管理,事物也是不生效的

// 注释调@Component,该类没被Spring管理,事物也是不生效的
public class Demo {@Transactional(rollbackFor = Exception.class)public void A() {......}
}

八、事务方法内启动新线程进行异步操作

子线程发生异常,主线程感知不到,线程之间是异步的。

@Transactional(rollbackFor= BizException.class)public int transfer2(String from,String to, int money){accountDao.decrMoney(from,money);new Thread(()->{int c = 5/0;accountDao.addMoney(to,money);}).start();return 1;}

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

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

相关文章

NLP评价指标

一、分类任务常见评估: 准确度(Accuracy) 评估预测正确的比例,精确率(Precision) 评估预测正例的查准率,召回率(Recall) 评估真实正例的查全率。如果是多分类,则每个类别各自求P、R最终求平均值。 TP(True Positives…

数字孪生技术快速构建智慧光伏电站智能运维系统

前言 光伏即光生伏特,是通过半导体材料实现的光电转化。以太阳能电池板为核心的光伏设施将太阳能直接转化为电能,释放光能这一清洁能源的应用价值。 经过十几年的发展,光伏产业已成为我国少有的形成国际竞争优势、实现端到端自主可控、并有望…

智慧公厕系统架构分析及应用探索

智慧公厕是运用物联网技术和云计算平台,实现对公共厕所的智能管理和优化的未来式公共厕所信息化整体解决方案。该系统由应用层、平台层、传输层和感知层组成,各层相互配合,共同构建一个高效、智能的公厕运营环境。 一、感知层: …

Vue.js+SpringBoot开发城市桥梁道路管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询城市桥梁4.2 新增城市桥梁4.3 编辑城市桥梁4.4 删除城市桥梁4.5 查询单个城市桥梁 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的城市桥梁道路管理系统,支持…

软件杯 卷积神经网络手写字符识别 - 深度学习

文章目录 0 前言1 简介2 LeNet-5 模型的介绍2.1 结构解析2.2 C1层2.3 S2层S2层和C3层连接 2.4 F6与C5层 3 写数字识别算法模型的构建3.1 输入层设计3.2 激活函数的选取3.3 卷积层设计3.4 降采样层3.5 输出层设计 4 网络模型的总体结构5 部分实现代码6 在线手写识别7 最后 0 前言…

Python数据处理实战(5)-上万行log数据提取并分类进阶版

系列文章: 0、基本常用功能及其操作 1,20G文件,分类,放入不同文件,每个单独处理 2,数据的归类并处理 3,txt文件指定的数据处理并可视化作图 4,上万行log数据提取并作图进阶版 …

第107讲:Mycat实践指南:取模分片下的水平分表详解

文章目录 1.使用取模分片水平分表2.水平分表取模分片案例2.1.准备测试的表结构2.2.配置Mycat实现范围分片的水平分表2.2.1.配置Schema配置文件2.2.2.配置Rule分片规则配置文件2.2.3.配置Server配置文件2.2.4.重启Mycat 2.3.写入数据观察水平分表效果 1.使用取模分片水平分表 平…

element---tree树形结构(返回的数据与官方的不一样)

项目中要用到属性结构数据&#xff0c;后端返回的数据不是官方默认的数据结构&#xff1a; <el-tree:data"treeData":filter-node-method"filterNode":props"defaultProps"node-click"handleNodeClick"></el-tree>这是文档…

品牌要把控质量也要管控价格

在品牌发展的道路上&#xff0c;产品质量的把控非常重要&#xff0c;关系到品牌的竞争力&#xff0c;但品牌要长期发展&#xff0c;产品要获得市场足够份额&#xff0c;还需要有稳定的价格体系做支撑&#xff0c;这个价格不是仅凭品牌单方面的定价而定&#xff0c;而是整个渠道…

运维知识点-Tomcat

Tomcat tomcat日志告警tomcat文件包含读取漏洞Tomcat ### 远程代码执行(7.0.0-7.0.81) 开启PUT,访问127.0.0.1:8080改PUT,创建x.jsp,写入shellwar后文件部署,登入特定后台,上传包含jsp写的war文件。文件解析tomcat日志告警 cat catalina.sh /usr/local/tomcat/confTo…

NextJs教程系列(四):路由loading

loading加载 loading.js 可以帮助你使用React Suspense创建一个组件, 当你在加载路由内容时&#xff0c;它会显示该加载状态组件&#xff0c;渲染完成后&#xff0c;新的内容将会自动替换。 传统ssr渲染流程 传统的ssr渲染流程&#xff0c;当用户请求一个页面时&#xff0c;服…

高中数学:初等函数之幂函数

1、定义 注意&#xff1a;x项系数&#xff0c;只能是1&#xff01; 例题&#xff1a; 2、常见幂函数图像 3、分数指数幂 x定义域&#xff1a;分母为偶数时&#xff0c;如&#xff1a;2、4、6等&#xff0c;则x≥0 x≥0时 4、画草图 步骤&#xff1a; 1、利用结论画出第…