spring事务详解

85 阅读1分钟

一、事务不生效

  1. 方法修饰符不是public

  2. 方法用final修饰

  3. 同一个类中调用事务方法

image.png

  1. 类本身未被spring管理

image.png

  1. 多线程调用
  2. 存储引擎不支持事务 比如Mysql的Myisam存储引擎是不支持事务的,只有innodb存储引擎才支持.
  3. 未开启事务 传统的spring项目需要在applicationContext.xml文件中,手动配置事务相关参数,如果忘了配置,事务是不会生效的。

二、事务不回滚

  1. 错误的事务传播特性 简单介绍一下Spring事务的7种传播机制:
事务名称说明
PROPAGATION_REQUIRED如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务
PROPAGATION_SUPPORTS如果当前存在事务,则加入该事务;如果没有事务,则以非事务方式继续运行
PROPAGATION_MANDATORY必须运行在已存在的事务中,否则抛出异常
PROPAGATION_REQUIRES_NEW创建一个新事务,如果已经存在一个事务,则把当前事务挂起
PROPAGATION_NOT_SUPPORTED以非事务方式运行,如果当前存在事务,则把当前事务挂起
PROPAGATION_NEVER以非事务方式运行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则等同于PROPAGATION_REQUIRED
  1. try...catch,异常被自己处理掉了
  2. 自定义了回滚异常

image.png