事务管理
事务管理
nodaoli什么是事务
事务是一组操作的集合,它是一个不可分割的工作单位,这些操作要么同时成功,要么同时失败。
操作顺序
- 开启事务(一组操作开始前,开启事务):start transaction / begin
- 提交事务(这组操作全部成功后,提交事务):commit
- 回滚事务(中间任何一个操作出现异常,回滚事务):rollback
Spring事务管理
- 注解:@Transactional
- 位置:业务(service)层的方法上、类上、接口上
- 作用:将当前方法交给spring进行事务管理,方法执行前,开启事务,方法执行后,提交事务,出现异常,回滚事务
1 | logging: |
rollbackFor
默认情况下,只有出现RuntimeException才回滚异常。rollbackFor属性用于控制出现何种异常类型,回滚事务。
例子:
1 | //开启事务管理 |
propagation
事务传播行为:指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。
当事务A方法调用事务B方法时,A方法可以不启用事务,也可以启用事务,而B方法则必须启用事务。
- REQUIRED:如果当前存在事务,则加入该事务,如果当前没有事务,则创建一个新的事务。这是默认值。
- REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则将当前事务挂起。
- NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则将当前事务挂起。
- NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
- MANDATORY:如果当前存在事务,则加入该事务,如果当前没有事务,则抛出异常。
- SUPPORTS:如果当前存在事务,则加入该事务,如果当前没有事务,则以非事务方式运行。
传播行为表
Propagation Behavior | Description |
---|---|
REQUIRED | 如果当前存在事务,则加入该事务,如果当前没有事务,则创建一个新的事务。这是默认值。 |
REQUIRES_NEW | 创建一个新的事务,如果当前存在事务,则将当前事务挂起。 |
NOT_SUPPORTED | 以非事务方式运行,如果当前存在事务,则将当前事务挂起。 |
NEVER | 以非事务方式运行,如果当前存在事务,则抛出异常。 |
MANDATORY | 如果当前存在事务,则加入该事务,如果当前没有事务,则抛出异常。 |
SUPPORTS | 如果当前存在事务,则加入该事务,如果当前没有事务,则以非事务方式运行。 |
例子
在注解@Transactional
中,propagation
属性用于控制事务传播行为。
1 | // 事务方法A |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果