Spring的声明式事务

本文最后更新于:5 天前

Spring的声明式事务

声明式事务是指利用AOP自动提交、回滚数据库事务

声明式事务规则:进入方法打开事务,执行成功提交,抛出运行时异常(RuntimeException)则回滚

@Transactional是声明式事务的注解,当@Transactional注解标于类前时, 表示类中所有方法都进行事务处理

@Transactional注解的参数

1、propagation 用于设置事务的传播行为

1
2
3
4
5
6
7
8
9
10
11
12
@Transactional(propagation = Propagation.REQUIRED)
//如果有事务,那么加入事务,没有的话新建一个(默认情况)
@Transactional(propagation = Propagation.NOT_SUPPORTED)
//容器不为这个方法开启事务,通常与“readOnly = true”搭配使用,表示方法是只读的,即:@Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
@Transactional(propagation = Propagation.REQUIRES_NEW)
//不管是否存在事务,都创建一个新的事务,旧的事务挂起,等待新的事务执行完毕,继续执行旧的事务
@Transactional(propagation = Propagation.MANDATORY)
//必须在一个已有的事务中执行,否则抛出异常
@Transactional(propagation = Propagation.NEVER)
//必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
@Transactional(propagation = Propagation.SUPPORTS)
//如果其他bean调用这个方法,在其他bean中声明事务,那就用事务,如果其他bean没有声明事务,那就不用事务

2、rollbackFor 用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚

1
2
3
4
5
6
@Transactional(rollbackFor = Exception.class)
//表示抛出所有类型的异常时,都进行回滚操作
@Transactional(rollbackFor = RuntimeException.class)
//表示抛出运行时异常时,进行回滚操作
@Transactional(rollbackFor = {RuntimeException.class, Exception.class})
//指定多个异常类

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!