原创

@Transactional 注解配置事务管理

事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。

一、编程式事务指的是通过编码方式实现事务。
二、声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。

声明式事务有两种方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于 @Transactional 注解的方式。

@Transactional 注解的属性介绍

1、value 和 transactionManager 属性

它们两个是一样的意思。当配置了多个事务管理器时,可以使用该属性指定选择哪个事务管理器。

2、propagation 属性

事务的传播行为,默认值为 Propagation.REQUIRED。

可选的值有:

Propagation.REQUIRED

如果当前存在事务,则加入该事务,如果当前不存在事务,则创建一个新的事务。

Propagation.SUPPORTS

如果当前存在事务,则加入该事务;如果当前不存在事务,则以非事务的方式继续运行。

Propagation.MANDATORY

如果当前存在事务,则加入该事务;如果当前不存在事务,则抛出异常。

Propagation.REQUIRES_NEW

重新创建一个新的事务,如果当前存在事务,暂停当前的事务。

Propagation.NOT_SUPPORTED

以非事务的方式运行,如果当前存在事务,暂停当前的事务。

Propagation.NEVER

以非事务的方式运行,如果当前存在事务,则抛出异常。

Propagation.NESTED

和 Propagation.REQUIRED 效果一样。

3、isolation 属性

事务的隔离级别,默认值为 Isolation.DEFAULT。

可选的值有:

Isolation.DEFAULT
使用底层数据库默认的隔离级别。

Isolation.READ_UNCOMMITTED

Isolation.READ_COMMITTED

Isolation.REPEATABLE_READ

Isolation.SERIALIZABLE

4、timeout 属性

事务的超时时间,默认值为-1。如果超过该时间限制但事务还没有完成,则自动回滚事务。

5、readOnly 属性

指定事务是否为只读事务,默认值为 false;为了忽略那些不需要事务的方法,比如读取数据,可以设置 read-only 为 true。

6、rollbackFor 属性

用于指定能够触发事务回滚的异常类型,可以指定多个异常类型。

7、noRollbackFor 属性

抛出指定的异常类型,不回滚事务,也可以指定多个异常类型。

@Transactional 的 propagation 属性代码示例

save 方法首先调用了 method1 方法,然后抛出了异常,就会导致事务回滚,如下两条数据都不会插入数据库。


@Transactional(propagation = Propagation.REQUIRED)
@Override
public void saveAppInfo(){

    method1();

    DocAppInfo docAppInfo = new DocAppInfo();
    docAppInfo.setAppName("测试");
    docAppInfo.setAppKey("appKey0001");
    docAppInfo.setAppSecret("00001Secret");
    docAppInfoMapper.insert(docAppInfo);
    if (true) {
        throw new RuntimeException("save 抛异常了");
    }
}

public void method1() {
    User user = new User("云雀用户");
    userMapper.insertSelective(user);
}
正文到此结束
该篇文章的评论功能已被站长关闭