什么是声明式事务
声明式事务声明式事务让我们不去手动编写事务开启和提交、回滚等代码,而是交给第三放框架自动管理,如Spring。
声明式事务使用方式
- Spring 早期实现方式
ProxyFactoryBean + XML - AOP实现
tx:advice + aop命名空间 —— 一次配置,永久生效 - 注解实现(推荐)
使用@Transactional —— 注解控制
事务方法嵌套
这是声明式事务独有的概念 —— 事务方法的嵌套。
提现在事务的传播行为上。
Spring的默认事务行为是propagation_required。当有新的事务时,如果已存在事务,直接加入到原有的事务;否则创建新的事务。
什么时候回滚事务
对于Spring的声明式事务来说,它的回滚时机是当方法抛出运行期异常(RuntimeException)时。如果抛出的是非运行期异常,则不会回滚。
避免不当地使用try-catch,以免没有正确抛出运行期异常,导致声明式事务失效。
使用注解控制事务的优点
使用org.springframework.transaction.annotation.Transactional
注解控制事务有以下优点:
- 开发团队达成一致约定,明确标注事务方法的编程风格。
- 保证事务方法的执行时间尽可能短。
- 不要穿插其他的网络操作(RPC/HTTP)请求。
- 若仍然需要网络操作,要剥离到事务方法外。可将网络操作封装为上层方法,将结果作为参数传入到开启事务的方法中。
- 不是所有的方法都需要事务。如只有一条修改操作、只读操作不需要事务控制。(详细看MySQL行级锁)
网友评论