事务
大约 1 分钟javaspring
概述
事务传播方式分为七个枚举:
REQUIRED- 默认传播类型,如果当前没有事务,则自己新建一个事务,如果当前存在事务,则加入这个事务SUPPORTS- 当前存在事务,则加入当前事务,如果当前没有事务,就以非事务方法执行MANDATORY- 当前存在事务,则加入当前事务,如果当前事务不存在,则抛出异常REQUIRES_NEW- 创建一个新事务,如果存在当前事务,则挂起该事务NOT_SUPPORTED- 始终以非事务方式执行,如果当前存在事务,则挂起当前事务NEVER- 不使用事务,如果当前事务存在,则抛出异常NESTED- 如果当前事务存在,则在嵌套事务中执行,否则REQUIRED的操作一样(开启一个事务)
失效场景
- 注解使用在非
public方法上(事务注解要求只能使用在public方法上) propagation(传播行为)属性配置错误(不合理)rollbackFor属性设置错误。默认情况下,注解@Transactional只对运行时异常RuntimeException和Error进行回滚,如果想要对所有异常情况都回滚需要显式的指定@Transactional(rollbackFor = Exception.class)- 通过
this调用同一个类中的方法,没有使用代理对象,导致事务失效 - 主动
catch异常(吃掉了异常),导致事务失效 - 数据库本身不支持,例如
mysql的MyISAM引擎
