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

事务失效场景@Transactional

参考文章 :JAVA 事务不生效的常见场景和修改方案

总结:类上要有注解,才能走代理;方法必须是public;

一、

方法所在的类本身,没有交给Spring管理,如缺少@Component、@Service等注解;
Spring事务是由AOP机制实现的,也就是说从Spring IOC容器获取bean时,Spring会为目标类创建代理,来支持事务的。类缺少注解,不是Spring管理的类,无法创建代理。

二、

方法no-public(事务方法不能被private、final、static关键字修饰)
no-public 方法无法被Spring创建代理。

三、

方法内部调用,自己调用自己,没有走代理。
解决方法(核心就是走代理):
1.自己引入自己(引入类本身),@Autowired Impl impl,然后在类中,自己调用自己(impl.get)
在这里插入图片描述
2.新建@Service,public方法放在另一个类中;
3.创建新文件,继承ApplicationContextAware,编写getBean方法;
ApplicationContextUtil.getBean(EstimateSaleSingleController.class).test();
4.获取当前类的代理对象 AopContext.currentProxy(); 同过代理对象去获取方法(可以在同一个类中写)。 CommonService commonService = (CommonService) AopContext.currentProxy();

四、

手动选择错误的事务传播属性,即@Transactional注解的propagation属性。
不手动选择,就不会出现问题,默认是REQUIRED:支持当前事务,若是当前没有事务,就新建一个事务。

五、

选择错误的异常处理方式;
1.默认事务回滚是RuntimeException,如果异常是非RuntimeException异常,如IOEException,则事务失效
2.catch 住异常,但不抛出,事务也会失效;(记住必须抛异常才会回滚)
catch (Exception e){
//1.不做任何处理,不抛异常,事务不回滚
e.printStackTrace();
}
catch(Exception e) {
//2.抛出异常,事务生效,会回滚
throw new Exception(“dddd”);
}

六、

配置错误的 @Transactional 注解
1.@Transactional(readOnly = true) readOnly=true 属性指示这是一个只读事务,写数据事务无法生效;
异常信息:SQLException: Connection is read-only. Queries leading to data modification are not allowed 不允许数据修改
2.Transactional(timeout = 60) timeout属性被设置为60秒,超过时间未执行完,则事务失效;
异常信息:Transaction timed out: deadline was Fri Mar 08 18:29:40 CST 2024 (表示事务最后截止时间,从进入这个方法开始计时,到执行操作数据方法时,所在时间大小比)
在这里插入图片描述

注意:简单的单表操作语句,没有必要添加事务注解@Transactional。因为事务本身指的是一组操作,要么同时成功、要么同时失败。

http://www.xdnf.cn/news/1117423.html

相关文章:

  • Vue单文件组件与脚手架工程化开发
  • [特殊字符]使用 Nginx 将 HTTP 重定向到 HTTPS
  • dll文件缺失解决方法
  • SegFix: Model-Agnostic Boundary Refinementfor for Segmentation
  • Linux713 SAMBA;磁盘管理:手动挂载,开机自动挂载,自动挂载
  • 五次方程无根式解的群论证明详解
  • 大模型-量化技术
  • 【设计模式】命令模式 (动作(Action)模式或事务(Transaction)模式)宏命令
  • 【Linux内核模块】模块加载函数--从启动到运行的幕后推手
  • (S4)Efficiently Modeling Long Sequences with Structured State Spaces论文精读(逐段解析)
  • C语言---自定义类型(上)(结构体类型)
  • 20250713-`Seaborn.pairplot` 的使用注意事项
  • 信号量机制,互斥的避免自旋锁的实现方法(操作系统)
  • 应用层协议和JSON的使用
  • 飞算AI使用体验-一种基于项目工程思维的AI-Code思路
  • DVWA | Weak Session IDs 弱会话标识符
  • 【VLLM】大模型本地化部署
  • 当外卖骑手遇上“爽提学院”:一场关于专业的蜕变
  • Vue中的render()函数
  • 封装---优化try..catch错误处理方式
  • 小程序部分pai
  • 【OpenGL ES】手撕一个mini版的Android native渲染框架
  • 深入理解数据库连接池:原理、实现与Druid实战
  • 使用binutils工具分析目标文件(壹)
  • 【网络工程师软考版】计算机组成原理
  • SylixOS 下的中断嵌套
  • Android自定义View的事件分发流程
  • python的平安驾校管理系统
  • html案例:编写一个用于发布CSDN文章时,生成有关缩略图
  • 嵌入式固件 .pkg 打包流程