Spring事务重点

Spring事务最重要三种传播

  首先声明本文只讨论这三种事务传播,分别是 PROPAGATION_REQUIRED,PROPAGATION_REQUIRED_NEW,PROPAGATION_NESTED。

  背景:我们在设计业务时不可能所有的业务操作都是自己写完,放在一个方法中,有时候需要调用其他方法,其他同事的代码。这种情况下需要我们考虑事务的传播性。

A方法事务是REQUIRED,我们讨论的对象是B方法调用应该采用哪种事务

  1. PROPAGATION_REQUIRED,最常使用的事务。场景:业务A方法调用B方法。A已经是REQUIRED事务,B采用PROPAGATION_REQUIRED,分为两种情况考虑,第一种:A成败对B有没有影响,答案是有,A方法发生异常引起回滚操作会影响B方法的操作结果无效。第二种:B的成败对A有没有影响。答案是有,B方法发生异常引起回滚操作会影响A方法的操作结果无效。B和A是同失败同成功这个是最常见的逻辑。
  2. PROPAGATION_REQUIRED_NEW,场景:业务A方法调用B方法。A已经是REQUIRED事务,B采用PROPAGATION_REQUIRED_NEW,分为两种情况考虑,第一种:A成败对B有没有影响,答案需要细说,A方法发生异常引起回滚操作在调用B之前肯定会导致B不能调用,A发生异常在B方法之后对B无影响。第二种:B的成败对A有没有影响。答案需要细说,B方法发生异常引起回滚操作A对异常进行了捕获处理,这种情况不会影响A。B方法发生异常引起回滚操作A没有对异常进行了捕获处理,A的操作也会回滚。
  3. PROPAGATION_NESTED,场景:业务A方法调用B方法。A已经是REQUIRED事务,B采用PROPAGATION_NESTED,分为两种情况考虑,同PROPAGATION_REQUIRED_NEW情况。特殊说明,当B方法事务提交完成时是把B方法之前包括A的操作进行提交。当B回滚时只是B自己回滚不会影响到A的操作。
时间: 2024-12-15 03:05:23

Spring事务重点的相关文章

Spring事务管理(详解+实例)

写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: Spring事务机制详解 Spring事务配置的五种方式 Spring中的事务管理实例详解 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是要么都执行要么都

Spring事务管理

写这篇博客之前我首先读了<spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: Spring事务机制详解 Spring事务配置的五种方式 Spring中的事务管理实例详解 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是要么都执行要么都

Spring事务

事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做 ACID 1.原子性(Atomicity)    即事务是不可分割的最小工作单元,事务内的操作要么全做,要么全不做2.一致性(Consistency)    在事务执行前数据库的数据处于正确的状态,而事务执行完成后数据库的数据还是处于正确的状态,即数据完整性约束没有被破坏    如银行转帐,A转帐给B,必须保证A的钱一定转给B,一定不会出现A的钱转了但B没收到,否则数据库的数据就处于不一致

Spring事务使用

Spring事务的配置多种方式(我现阶段常用声明式的配置方式,这里重点总结下此类方式). 一.Spring事务中关键点 1.事务传播性:一个事务被另一个事务调用,其所采用的运行方式: 2.事务隔离性:不同事务间的隔离级别: 3.对异常的处理方式:默认情况下,Spring接收到RuntimeException才进行事务回滚,受检Exception是不进行回滚操作的,可以配置针对哪些异常做回滚操作: 4.只读属性:针对只读操作的方法,配置上会有性能优化: 还有其他一些属性. 二.事务回滚方式 1.方

Spring 事务管理高级应用难点剖析--转

第 1 部分 http://www.ibm.com/search/csass/search/?q=%E4%BA%8B%E5%8A%A1&sn=dw&lang=zh&cc=CN&en=utf&hpp=20&dws=cndw&lo=zh 概述 Spring 最成功,最吸引人的地方莫过于轻量级的声明式事务管理,仅此一点,它就宣告了重量级 EJB 容器的覆灭.Spring 声明式事务管理将开发者从繁复的事务管理代码中解脱出来,专注于业务逻辑的开发上,这是一件

Spring事务管理--多个ORM框架在使用时的情况分析

公司的项目已经接近尾声了,总结一下项目中用到的技术,我发现项目中的有些东西还是挺模糊的,只是知道这么用就行了.并不清楚其中的原理.由于公司的项目比较老,是7年前的一个项目了,中间一直有人在维护,也是在这个过程中不断融入了新的东西,比如就项目的持久化这块来说,就用了ibatis.mybatis.hibernate.spring JDBC四种混合的框架.究其原因只能说是历史遗留问题,就不做过多的解释了.但是这么多持久化的框架如何协同工作的,尤其是事务的控制,一个系统中使用如此多的持久化框架是,他们是

分布式事务系列(1.1)Spring事务管理器PlatformTransactionManager

1 系列目录 分布式事务系列(开篇)提出疑问和研究过程 分布式事务系列(1.1)Spring事务管理器PlatformTransactionManager源码分析 2 jdbc事务 2.1 例子 public void save(User user) throws SQLException{ Connection conn=jdbcDao.getConnection(); conn.setAutoCommit(false); try { PreparedStatement ps=conn.pre

spring事务的7种传播级别

PROPAGATION_REQUIRED ,默认的spring事务传播级别,使用该级别的特点是,如果上下文中已经存在事务,那么就加入到事务中执行,如果当前上下文中不存在事务,则新建事务执行.所以这个级别通常能满足处理大多数的业务场景. PROPAGATION_SUPPORTS,从字面意思就知道,supports,支持,该传播级别的特点是,如果上下文存在事务,则支持事务加入事务,如果没有事务,则使用非事务的方式执行.所以说,并非所有的包在transactionTemplate.execute中的代

Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别

转: http://blog.csdn.net/it_man/article/details/5074371 Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. 总结如下: Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪