tx:method属性详解

原文链接: https://blog.csdn.net/qq_37272886/article/details/88638575.

<tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="get*" propagation="SUPPORTS" isolation="DEFAULT"read-only="true" /><tx:method name="find*" propagation="SUPPORTS" isolation="DEFAULT"read-only="true" /><tx:method name="load*" propagation="SUPPORTS" isolation="DEFAULT"read-only="true" /><tx:method name="*" propagation="REQUIRED" rollback-for="java.lang.Exception" /></tx:attributes>
</tx:advice>

<tx:method >的属性详解

属性 默认值 说明
propagation REQUIRED 事务传播属性
isolation DEFAULT(所用数据库默认级别) 事务隔离级别
readOnly false 是否才用优化的只读事务
timeout -1 超时(秒)
rollbackFor 需要回滚的异常类
rollbackForClassName 需要回滚的异常类名
noRollbackFor 不需要回滚的异常类
noRollbackForClassName 不需要回滚的异常类名

readOnly

事务属性中的readOnly标志表示对应的事务应该被最优化为只读事务。如果值为true就会告诉Spring我这个方法里面没有insert或者update,你只需要提供只读的数据库Connection就行了,这种执行效率会比read-write的Connection高,所以这是一个最优化提示。在一些情况下,一些事务策略能够起到显著的最优化效果,例如在使用Object/Relational映射工具(如:Hibernate或TopLink)时避免dirty checking(试图“刷新”)。

timeout

在属性中还有定义“timeout”值的选项,指定事务超时为几秒。一般不会使用这个属性。在JTA中,这将被简单地传递到J2EE服务器的事务协调程序,并据此得到相应的解释。

Isolation Level(事务隔离等级)的5个枚举值

为什么事务要有Isolation Level这个属性?先回顾下数据库事务的知识:

  • 第一类丢失更新(lost update):在完全未隔离事务的情况下,两个事物更新同一条数据资源,某一事物异常终止,回滚造成第一个完成的更新也同时丢失。
  • 第二类丢失更新(second lost updates):是不可重复读的特殊情况,如果两个事务都读取同一行,然后两个都进行写操作,并提交,第一个事务所做的改变就会丢失。
  • 脏读(dirty read):如果第二个事务查询到第一个事务还未提交的更新数据,形成脏读。因为第一个事务你还不知道是否提交,所以数据不一定是正确的。
  • 虚读(phantom read):一个事务执行两次查询,第二次结果集包含第一次中没有或者某些行已被删除,造成两次结果不一致,只是另一个事务在这两次查询中间插入或者删除了数据造成的。
  • 不可重复读(unrepeated read):一个事务两次读取同一行数据,结果得到不同状态结果,如中间正好另一个事务更新了该数据,两次结果相异,不可信任。

当遇到以上这些情况时我们可以设置isolation下面这些枚举值:

  • **DEFAULT:**采用数据库默认隔离级别
  • SERIALIZABLE:最严格的级别,事务串行执行,资源消耗最大;
  • **REPEATABLE_READ:**保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。
  • **READ_COMMITTED:**大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”。该级别适用于大多数系统。
  • READ_UNCOMMITTED:保证了读取过程中不会读取到非法数据。隔离级别在于处理多事务的并发问题。

关于propagation属性的7个传播行为

  • REQUIRED:指定当前方法必需在事务环境中运行,如果当前有事务环境就加入当前正在执行的事务环境,如果当前没有事务,就新建一个事务。这是默认值。
  • SUPPORTS:指定当前方法加入当前事务环境,如果当前没有事务,就以非事务方式执行。
  • MANDATORY:指定当前方法必须加入当前事务环境,如果当前没有事务,就抛出异常
  • REQUIRES_NEW:指定当前方法总是会为自己发起一个新的事务,如果发现当前方法已运行在一个事务中,则原有事务被挂起,我自己创建一个属于自己的事务,直我自己这个方法commit结束,原先的事务才会恢复执行。
  • NOT_SUPPORTED:指定当前方法以非事务方式执行操作,如果当前存在事务,就把当前事务挂起,等我以非事务的状态运行完,再继续原来的事务。
  • NEVER:指定当前方法绝对不能在事务范围内执行,如果方法在某个事务范围内执行,容器就抛异常,只有没关联到事务,才正常执行。
  • NESTED:指定当前方法执行时,如果已经有一个事务存在,则运行在这个嵌套的事务中.如果当前环境没有运行的事务,就新建一个事务,并与父事务相互独立,这个事务拥有多个可以回滚的保证点。就是指我自己内部事务回滚不会对外部事务造成影响,只对DataSourceTransactionManager事务管理器起效。

tx:method属性详解相关推荐

  1. html5 规定输入字段,HTML5 Input属性详解

    本篇教程探讨了HTML5 Input属性详解,希望阅读本篇文章以后大家有所收获,帮助大家HTML5+CSS3从入门到精通 . < value 属性 value 属性规定输入字段的初始值: rea ...

  2. java rollback_Spring中的@Transactional(rollbackFor = Exception.class)属性详解

    序言 今天我在写代码的时候,看到了.一个注解@Transactional(rollbackFor = Exception.class),今天就和大家分享一下,这个注解的用法: 异常 如下图所示,我们都 ...

  3. @Column注解属性详解

    目录 导读 是什么? 步骤 总结 导读 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制.Java 语言中的类.方法.变量.参数和包等都可以被标注.和 ...

  4. mixins php,vue的mixins属性详解

    这篇文章主要介绍了vue的mixins属性详解,现在分享给大家,也给大家做个参考. 首先先给出官网 https://vuejs.org/v2/guide/mixins.html 今天在开发项目的时候要 ...

  5. @Column注解及属性详解

    @Column注解 用来标识实体类中属性与数据表中字段的对应关系 (1)源码: /** Copyright (c) 2008, 2009, 2011 Oracle, Inc. All rights r ...

  6. 【input 标签的 type 属性详解】

    input 标签的 type 属性详解 1. input 输入标签的 type 属性 1.1 input 标签的 type类型 属性的常用属性值 ⑴ 单行文本框: type="text&qu ...

  7. python中文读音ndarray-numpy中的ndarray方法和属性详解

    NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是一个一维数 ...

  8. spring MVC请求处理类注解属性详解

    spring MVC请求处理类注解属性详解

  9. Meta http-equiv属性详解

    Meta http-equiv属性详解 博客分类: Web综合 HTML浏览器IECache搜索引擎  http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮 ...

最新文章

  1. 各大厂分布式链路跟踪系统架构对比
  2. django安装mysql驱动
  3. 奇瑞汽车鸿蒙系统,华为鸿蒙OS系统汽车来了!国产汽车巨头奇瑞全球首发:开启崛起之路...
  4. 计算机导论与计算机组成原理关系,计算机组成原理
  5. showModalDialog参数使用
  6. Node.js webpack中导入vue的三种方法
  7. ES6箭头函数(节选自《ECMAScript 6 入门》)
  8. matlab 数字调制函数,matlab用于数字调制,几个函数的使用问题
  9. 工厂方法模式(Factory Method Pattern)
  10. 绕过waf mysql爆库_sqlilab-Less-21-30-writeup
  11. JAVA中的适配器应用_Java适配器模式详解和实际应用.md
  12. 如何使用final阻止重载?如何使用final阻止继承?
  13. 三、 安装项目依赖以及启动项目
  14. 【数位dp】模版总结
  15. 基于单片机的银行排队叫号系统的设计
  16. 日常提醒2 (delphi源码)
  17. js JSON转Excel并导出
  18. java毕业设计网上教学系统mybatis+源码+调试部署+系统+数据库+lw
  19. 数字孪生可视化平台关键技术研究案例
  20. Elasticsearch面试专题总结

热门文章

  1. Linux 下如何查看进程和终止进程
  2. Redis面试题总结(超详细)
  3. 考研数学线上笔记(五):凯哥导数及几何应用概念选择题系列课程
  4. navicat导出sql数据,保留datetime三位小数
  5. 【已解决】leaflet比例尺:L.control.scale 单位国际化(m:米、km:公里、ft:英尺、mi:英里)
  6. 应用更新跳转 AppStore,千万别一不小心跳到 itune,因为 itune 里的 app 没有更新按钮
  7. HTML5+CSS3实现华为官网
  8. 2019暑期训练——牛客第七场 C. Governing sand(权值线段树)
  9. 【C进阶】之宏定义的扩展
  10. Yolov5添加注意力机制