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

Spring事务十种失效场景

首先我们要明白什么是事务?它的作用是什么?它在什么场景下在Spring框架下会失效?

事务:本质上是由数据库和程序之间交互的过程中的衍生物,它是一种控制数据的行为规则。有几个特性

1、原子性:执行单元内,要么都执行,要么都不执行,不能说执行一半,剩下一半不执行了

2、一致性:意味着一旦发生数据变化,在数据执行单元内,要么都成功,要么数据都回滚到在单元内操作之前的数据。

3、隔离性:并发访问时,每个人拿到的事务id是不一致的,而每个人对数据的操作是相互隔离的,这个比较深奥,后面单独再讲讲数据库的隔离级别

4、持久性:表示的是事务一旦提交,对数据库的影响是永久的

正因为有了事务控制,我们才能对数据正确的处理,查阅,但是如果用不好事务,也会给我们的数据造成预期之外的结果。

下面我们说一下在Spring框架中哪些场景我们使用@Transactional会失效


1、事务未被Spring容器管理

     例如实现类未加@Service注解,没有注入到Spring容器

2、事务方法被final修饰

      会导致Spring生成的代理类无法重写该方法,因而导致事务失效

3、事务管控的方法非public修饰

     本质还是由于Spring生成的代理类无法访问该方法,权限不足

4、同类中方法互相调用

    A调用B方法,A未被事务注解管控,会导致B事务也失效

5、设定的事务传播类型不支持事务

    如果设定的事务传播类型@Transactional(propagation= Propagation.NOT_SUPPORTED)不支持事务,则事务也会失效

6、异常被吞噬

      程序异常未抛出,被catch,事务会感知不到,从而事务失效

7、数据库不支持事务

    数据库本身不支持事务,如mysql存储引擎为Myisam就不支持事务

8、项目未配置开启事务

    未配置Spring事务管理器,像@EnableTransactionManagement注解未配置,或者

9、错误的事务传播特性

        如果设置了Propagation.NEVER,这种传播特性是不支持事务的,如果存在事务则报错

10、多线程调用

        事务管控的方法开启多线程调用,事务id不在当前线程,则是无法事务回滚的

http://www.lryc.cn/news/390563.html

相关文章:

  • JELR-630HS漏电继电器 30-500mA 导轨安装 约瑟JOSEF
  • 如何实现一个简单的链表或栈结构
  • 抖音外卖服务商入驻流程及费用分别是什么?入驻官方平台的难度大吗?
  • “小红书、B站崩了”,背后的阿里云怎么了?
  • nginx的配置文件
  • 艾滋病隐球菌病的病原学诊断方法包括?
  • jQuery Tooltip 插件使用教程
  • 访问者模式在金融业务中的应用及其框架实现
  • .npy格式图像如何进行深度学习模型训练处理,亲测可行
  • XFeat快速图像特征匹配算法
  • 普元EOS学习笔记-低开实现图书的增删改查
  • 动态住宅代理IP详细解析
  • 等保2.0 实施方案之信息软件验证要求
  • 【LeetCode的使用方法】
  • 【SGX系列教程】(二)第一个 SGX 程序: HelloWorld,linux下运行
  • 网页报错dns_probe_possible 怎么办?——错误代码有效修复
  • Vue.js 中属性绑定的详细解析:冒号 `:` 和非冒号的区别
  • 使用Java实现智能物流管理系统
  • 深圳技术大学oj C : 生成r子集
  • 不同操作系统下的换行符
  • Transformation(转换)开发-switch/case组件
  • Android Gradle 开发与应用 (二): Android 项目结构与构建配置
  • 02:vim的使用和权限管控
  • GNeRF代码复现
  • EXCEL返回未使用数组元素(未使用值)
  • 系统调用简单介绍
  • Mac可以读取NTFS吗 Mac NTFS软件哪个好 mac ntfs读写工具免费
  • AI是否能够做决定
  • 【Excel操作】Python Pandas判断Excel单元格中数值是否为空
  • C# Opacity 不透明度