Spring 中的事务处理

一、事务业务描述

事务是一个不可分割逻辑工作单元,是一个业务,事务的处理通常要结合业务进行落地的实现。进而更好保证业务的完整性(要么都成功,要么都失败)。

二、Spring 中的事务控制

Spring中的事务控制,推荐在业务层基于AOP方式进行实现,这样可以将事务逻辑与业务逻辑进行更好的解耦,同时可以重用事务逻辑代码.进而简化大量事务模板代码的编写.

SpringBoot工程中的事务控制,可以直接在需要进行事务控制的类或业务方法上通过@Transaction注解描述即可,由此注解描述的方法为事务切入点方法,底层在切入点方法执行时会通过“通知方法”进行事务逻辑增强,示例代码如下:

1 @Transactional
2 public int updateObject(...){
3    ....
4 }

当一个类中有个方法都需要事务控制,我们可以使用@Transactional注解对类进行描述,示例代码如下:

1 @Transactional
2 public class XxxServiceImpl implements XxxService{}

二、Spring 中的事务属性分析

在使用@Transactional描述类或方法时候,还可以指定一些事务属性,例如:

1) readOnly 用于描述此事务是否为只读事务,默认值是false(表示不是只读事务),对于查询而言建议设置值为true.

2) timeout 事务的超时时间,超过设置的时间会抛出异常,默认为-1(不超时,实际项目中建议设置超时时间)。

3) rollbackFor 设置出现什么异常时要回滚事务(默认为RuntimeException)。

4) isolation 设置事务并发执行时的隔离级别(隔离级别越高,数据正确性越好,但并发越差)。

5)propagation 设置事务的传播特性(默认值为Propagation.REQUIRED),不同业务对象之间的方法出现相互调用时,事务的执行策略。REQUIRED表示参与到调用者的事务中去,其它选项自行查阅。

案例分析:

1 @Transactional(readOnly = false,
2                rollbackFor = Throwable.class,
3                isolation = Isolation.READ_COMMITTED,
4                timeout = 5,
5                propagation= Propagation.REQUIRED)
6 public class XxxServiceImpl implements XxxService{}

说明,假如类和方法上都定义了事务特性,那方法上定义的事务特性优先级比较高。

原文地址:https://www.cnblogs.com/houyu/p/14284610.html