说说 Spring 事务的传播行为

作者 : 开心源码 本文共840个字,预计阅读时间需要3分钟 发布时间: 2022-05-12 共97人阅读

当我们调用一个基于 Spring 的 Service 接口方法(比方 AccountService#addr() )时,它将运行在 Spring 管理的事务环境中, 这个方法可能会在内部调用其它的 Service 接口方法以共同完成一个完整的业务操作,因而就会发生服务接口方法嵌套调用的场景, 这时, Spring 会通过事务传播行为,来控制当前事务,应该如何传播到被嵌套调用的目标服务接口方法中 。

Spring 在 TransactionDefinition 接口中规定了 7 种类型的事务传播行为:

事务传播行为说明
PROPAGATION_REQUIRED假如当前没有事务,就新建一个事务;假如已经存在一个事务中,那么就加入。(常用)
PROPAGATION_SUPPORTS使用当前事务;假如当前没有事务,那么就以非事务的方式执行。
PROPAGATION_MANDATORY使用当前的事务;假如当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW新建事务;假如当前已存在事务,那么就挂起当前事务。
PROPAGATION_NOT_SUPPORTED以非事务方式执行;假如当前存在事务,那么就挂起当前事务。
PROPAGATION_NEVER以非事务方式执行;假如当前存在事务,那么就抛出异常。
PROPAGATION_NESTED假如当前存在事务,则在嵌套事务内执行;假如当前没有事务,则执行PROPAGATION_REQUIRED 情况下的操作 。

使用 PROPAGATION_NESTED 时,底层数据源必需基于 JDBC 3.0 ,并且支持保存点事务机制 。

在事务的解决过程中,假如发生错误进行了回滚 ,那么将撤销事务内对数据库的所有操作。在一个庞大的事务中,这是极其白费资源的。假设事务前半部分执行正确的,而事务的后半部分抛错,那么我们可以回滚到前半部分的结束位置,这时即可以使用保存点来实现。

一个事务可以建立多个保存点,将事务分割成一系列的部分。 这样,事务回滚时,即可以回滚到其中的某个保存点上,从而节约资源。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 说说 Spring 事务的传播行为

发表回复