Spring 事务记录
一.事务不生效得场景
1.访问权限问题 (只有public方法会生效)
2.方法用final修饰,不会生效
3.同一个类中的方法直接内部调用,会导致事务失效 (spring 事务是基于AOP 类实现的,默认类层的AOP)
4.(类本身) 未被spring管理
5.多线程调用
6.(存储引擎)表不支持事务
7.未开启事务
8.错误的传播特性
9.自己吞了异常
10.手动抛了别的异常
11.自定义了回滚异常
12.嵌套事务回滚多了
13.weblogic 部署未配置数据源(update 回滚正常,insert 回滚失败)
二、事务的隔离级别
1,@Transactional(isolation = Isolation.READ_UNCOMMITTED) 读未提交;
2,@Transactional(isolation = Isolation.READ_COMMITTED) 读已提交
3,@Transactional(isolation = Isolation.SERIALIZABLE) 串行化 该隔离级别会把该方法所涉及到的表全部锁起来,共享锁,其他事务只能查,不能写;
三、事务传播行为
1. TransactionDefinition.PROPAGATION_REQUIRED:
如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认值。
2. TransactionDefinition.PROPAGATION_REQUIRES_NEW:
创建一个新的事务,如果当前存在事务,则把当前事务挂起。
3. TransactionDefinition.PROPAGATION_SUPPORTS:
如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
4. TransactionDefinition.PROPAGATION_NOT_SUPPORTED:
以非事务方式运行,如果当前存在事务,则把当前事务挂起。
5. TransactionDefinition.PROPAGATION_NEVER:
以非事务方式运行,如果当前存在事务,则抛出异常。
6. TransactionDefinition.PROPAGATION_MANDATORY:
如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
7. TransactionDefinition.PROPAGATION_NESTED:
如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;
如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)