Spring事务失效场景
- @Transactional标记的方法,非public修饰
- @Transactional标记的方法所在内,非Spring容器管理
- @Transactional标记的方法,被类内部方法调用
- @Transactional 声明式事务默认只处理运行时异常,非运行时异常需要指定异常类型,例如
@Transactional(rollbackFor = Exception.class)
- 异常被
try catch语句块
捕获,未抛出异常(最难被排查到问题且容易忽略) - @Transactional中
Propagation
属性值设置错误即Propagation.NOT_SUPPORTED
(一般不会设置此种传播机制) - 数据库存储引擎不支持事务,如Mysql关系型数据库,如果选择的存储引擎是MyISAM而非InnoDB,则事务会不起作用(基本开发中不会遇到);