IT袋

当前位置:主页 > 经验教程 > 建站编程 >

Spring事务详解

Spring事务详解 深入解析Spring的事务机制(2)

时间:2024-01-26 20:01:04 来源:IT袋 作者:马勇
导读:Spring事务详解,传播行为 1)TransactionDefinition.PROPAGATION_REQUIRED 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。 举个例子: 如果只要 A 或者

Spring事务详解

传播行为

1)TransactionDefinition.PROPAGATION_REQUIRED

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

举个例子:

如果只要 A 或者 B 任意一个方法有异常,那么整个事务都会回滚。

@Service
Class A {
    @Autowired
    B b;
    @Transactional(propagation = Propagation.REQUIRED)
    public void aMethod {
        b.bMethod();
    }
}
@Service
Class B {
    @Transactional(propagation = Propagation.REQUIRED)
    public void bMethod {
    }
}

2)TransactionDefinition.PROPAGATION_REQUIRES_NEW

创建一个新的事务,如果当前存在事务,则把当前事务挂起。

举个例子:

B 事务开启了独立的事务,如果 A 抛出异常回滚,B 不会回滚,但 B 如果抛出异常回滚,那么 A 会回滚。

@Service
Class A {
    @Autowired
    B b;
    @Transactional(propagation = Propagation.REQUIRED)
    public void aMethod {
 
        b.bMethod();
    }
}
@Service
Class B {
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void bMethod {
  
    }
}

3)TransactionDefinition.PROPAGATION_NESTED

如果当前存在事务,就在嵌套事务内执行;如果当前没有事务,就单独开启一个事务。

举个例子:

当 A 回滚,B 是嵌套事务,会跟着一起回滚。当 B 回滚,A 不会跟着回滚。

@Service
Class A {
    @Autowired
    B b;
    @Transactional(propagation = Propagation.REQUIRED)
    public void aMethod {
        b.bMethod();
    }
}
@Service
Class B {
    @Transactional(propagation = Propagation.NESTED)
    public void bMethod {
    }
}

4)TransactionDefinition.PROPAGATION_MANDATORY

如果当前存在事务就加入该事务,如果当前没有事务,就抛出异常。

5)TransactionDefinition.PROPAGATION_SUPPORTS: 如果当前存在事务,则加入该事务,如果当前没有事务,则以非事务的方式继续运行。

6)TransactionDefinition.PROPAGATION_NOT_SUPPORTED: 以非事务方式运行,如果当前存在事务,则把当前事务挂起。

7)TransactionDefinition.PROPAGATION_NEVER: 以非事务方式运行,如果当前存在事务,则抛出异常。

事务回滚规则

默认情况下,只有遇到运行时异常 RuntimeException 的子类才会回滚,Error 也会导致事务回滚。

可以指定要回滚的异常类型

@Transactional(rollbackFor= BusinessException.class)

介绍一下 @Transactional 的作用范围

1)方法(只对 Public 方法生效)

2)类(整个类的 Public 方法都生效)

3)接口(不推荐)

是否只读

readOnly,指定事务是否为只读事务,默认为 false。

用来优化事务的执行,默认情况下每一个 SQL 放入单独的事务,事务要提交多次,如果声明了只读事务的话,数据库就会去优化它的执行。

相关阅读

  • 网络错误代码101是什么意思 打开网站错误代码101解决办法

    网络错误代码101是什么意思 打开网站错误代码101解决办法

    文章摘要:网络错误代码101是什么意思和打开网站错误代码101解决办法的相关知识,下面IT袋为您详细介绍 steam是一款受众非常广的游戏平台,最近上新的好游十分的多。但是最近有许多的玩家

  • web服务器怎么配置 免费个人web服务器推荐

    web服务器怎么配置 免费个人web服务器推荐

    对于许多网友来说web服务器怎么配置和免费个人web服务器推荐方面的内容,具体详情如下: 回想一下一个http请求的过程,你在浏览器输入xxx.com,经过域名解析 发起tcp的3次握手 建立tcp连接后

  • 用户输入网址到看到内容之间的过程

    用户输入网址到看到内容之间的过程

    对于许多网友来说用户输入网址到看到内容之间的过程的内容,相关内容具体如下: DNS解析: 浏览器首先会检查网址中的域名部分(例如,www.xxxxx.com)。 浏览器会向本地DNS缓存查询,如果之

  • Python列表基础详解 深入解析Python列表的基础知识

    Python列表基础详解 深入解析Python列表的基础知识

    今天带来的IT技巧小经验Python列表基础详解的话题,一定能解决您的问题的,一起来了解吧! 在Python中,列表是一种有序的、可变的数据结构,用于存储多个值。 列表可以包含各种类型的元素