| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 回顾事务的传播行为与Spring事务传播的问题 -> 正文阅读 |
|
[Java知识库]回顾事务的传播行为与Spring事务传播的问题 |
一 概述????????propagation,传播行为是指被调用的方法与当前方法事务的关系。 二 示例解析????????代码示例
事务传播行为分析:
????????如代码所示,当int i = 10/0;执行之后就会出现异常,而事务中出现可执行异常的时候就会发生回滚操作,此时当前方法a和调用方法b都会发生回滚,而调用方法c是不会回滚的。 ? ? ? ? 当调用方法b中出现异常的时候,当前方法a同样会发生回滚。 ? ? ? ? 当前方法a设置了30s,b设置了2s,此时b设置的时间会失效,因为b和a公用一个事务。 三 SpringBoot中事务的问题? ? ? ? 上述代码中的当前方法a和调用方法b,c 在同一个类文件中,此时b和c的设置就不起作用,且b和c都是使用同一个事务。 ? ? ? ? 事务的关键是一个代理。 ? ? ? ? 如果我们将调用方法b和调用方法c同当前方法a放在不同的文件中,此时b和c的事务就会起作用。 ? ? ? ? 注意将自己的代理引入会导致循环依赖。 ? ? ? ? 解决方法:使用代理对象调用事务方法 ? ? ? ? 1. 引入aop代码模块,使用其中aspectj完成动态代理
? ? ? ? 2. @EnableAspectJAutoProxy(exposeProxy = true),开启 aspectj 动态代理功能,以后所有的动态代理都是aspectj完成创建(即使没有接口也可以创建动态代理)。否者使用JDK自身的动态代理,JDK动态代理必须有接口。 ? ? ? ? 这样对外暴露代理对象。 ? ? ? ? 3. 用代理对象本类互调 ? ? ? ? // 获取本类的代理对象,可以使用接口,也可以使用实现类 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 8:53:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |