一、事务不生效
-
方法修饰符不是public
-
方法用final修饰
-
同一个类中调用事务方法
- 类本身未被spring管理
- 多线程调用
- 存储引擎不支持事务 比如Mysql的Myisam存储引擎是不支持事务的,只有innodb存储引擎才支持.
- 未开启事务 传统的spring项目需要在applicationContext.xml文件中,手动配置事务相关参数,如果忘了配置,事务是不会生效的。
二、事务不回滚
- 错误的事务传播特性 简单介绍一下Spring事务的7种传播机制:
| 事务名称 | 说明 |
|---|---|
| PROPAGATION_REQUIRED | 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务 |
| PROPAGATION_SUPPORTS | 如果当前存在事务,则加入该事务;如果没有事务,则以非事务方式继续运行 |
| PROPAGATION_MANDATORY | 必须运行在已存在的事务中,否则抛出异常 |
| PROPAGATION_REQUIRES_NEW | 创建一个新事务,如果已经存在一个事务,则把当前事务挂起 |
| PROPAGATION_NOT_SUPPORTED | 以非事务方式运行,如果当前存在事务,则把当前事务挂起 |
| PROPAGATION_NEVER | 以非事务方式运行,如果当前存在事务,则抛出异常。 |
| PROPAGATION_NESTED | 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则等同于PROPAGATION_REQUIRED |
- try...catch,异常被自己处理掉了
- 自定义了回滚异常