springd的事务管理

转载于:http://www.mamicode.com/info-detail-1248286.html

什么是事务

由一系列单个逻辑工作单元执行的一系列操作,这些操作要么全部完成执行,要么全部不执行。

事务的四大特性ACID

原子性(Atomicity):事务中的一系列操作,这些操作要么全部执行,要么全部不执行,例如:在银行取钱,输入密码、银行卡扣钱、atm机出钱,这几个操作就属于同一个事务。哪一步失败都应该回到最原始的状态。

一致性(consistency):事务执行结果一定是从一个一致性状态到另一个一致性状态。A+B的钱为1000,不管a,b之间如何转账,A+B的钱还是1000.

隔离性(Isolation):事务之间是相互隔离,当事务之间同时处理同一批数据时,事务之间相互隔离,不会相互干扰。如何事务之间没有隔离性,就可能出现脏读(一个事务读取了另外一个事务没有提交的数据)、不可重复读(事务在一段时间范围类,查询到的数据不一致【在这期间有别的事务在提交数据,主要针对】)、虚读【幻读】(前后两次的数据条数不一致【只要针对新增、删除】)。

Spring事务的隔离级别

持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。

spring中的事务管理

spring不直接管理事务,而是提供了多种事务管理器。将事务管理的职责委托给JTA等持久化机制所提供的相关平台框架来实现。我们系统是用jdbc方式进行数据持久化。

配置事务管理器 基于jdbc

 

Spring不关心事务管理的过程,它只是为各个平台提供一个统一的接口,通过这个接口为各个持久化平台提供对应的事务管理器。具体实现是平台自己的事情。

事务的重要属性

  1. 转播行为

事务的第一个方面是传播行为(propagation behavior)。当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。Spring定义了七种传播行为:

 

一般采用的都是PROPAGATION_REQUIRED

2:隔离级别

同上面spring事务的隔离级别

3:只读

事务的第三个特性是它是否为只读事务。如果事务只对后端的数据库进行只读操作

4:事务超时

为了使应用程序很好地运行,事务不能运行太长的时间。因为事务可能涉及对后端数据库的锁定,所以长时间的事务会不必要的占用数据库资源。事务超时就是事务的一个定时器,在特定时间内事务如果没有执行完毕,那么就会自动回滚,而不是一直等待其结束。

5:回滚规则

事务五边形的最后一个方面是一组规则,这些规则定义了哪些异常会导致事务回滚而哪些不会。默认情况下,事务只有遇到运行期异常时才会回滚,而在遇到检查型异常时不会回滚(这一行为与EJB的回滚行为是一致的)

但是你可以声明事务在遇到特定的检查型异常时像遇到运行期异常那样回滚。同样,你还可以声明事务遇到特定的异常不回滚,即使这些异常是运行期异常

spring中事务管理的实现

Spring提供了对编程式事务和声明式事务的支持,编程式事务允许用户在代码中精确定义事务的边界,而声明式事务(基于AOP)有助于用户将操作与事务规则进行解耦。

简单地说,编程式事务侵入到了业务代码里面,但是提供了更加详细的事务管理;而声明式事务由于基于AOP,所以既能起到事务管理的作用,又可以不影响业务代码的具体实现。

这里只介绍声明式事务

根据代理机制的不同,总结了五种Spring事务的配置方式;

1:每个Bean都有一个代理

2:所有Bean共享一个代理基类

3:使用拦截器

4:使用tx标签配置的拦截器

5:全注解

这里详解采用<aop><tx>命名空间拦截器来声明对事务管理

 

  • aop:pointcut标签配置参与事务的类,execution表达式execution(* com.ch..service.*.*(..))

其中第一个*代表返回值,第二*代表service下子包,第三个*代表方法名,..代表方法参数。所以这里表示com.ch..service下的包与子包的所以不限名字参数和返回类型的方法。

  • aop:advisor标签就是把上面我们所配置的事务管理两部分<aop><tx>属性整合起来作为整个事务管理.
  • advice-ref:指向事务adviceid
  • tx:advice配置事务传播特性
  • tx:attribute标签所配置的是作为事务的属性:方法名、转播行为、只读、隔离级别、超时处理、回滚机制

例如:

 

name为方法名 syn*是指以syn开头的方法。read-only 是设置事务的只读属性,rollback-for是定义事务的回滚机制。这边是指超时,错误、异常都进行回滚

  • transaction-manager:对应事务管理器的id

 

  • 原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。
  • 一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。
  • 隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。
  • 持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值