【Spring学习31】Spring事务(1):概述

本系列由以下文章组成:
Spring事务(1):概述
Spring事务(2):事务管理器
Spring事务(3):事务属性之隔离级别(isolation level)
Spring事务(4):事务属性之7种传播行为
Spring事务(5):编程式事务
Spring事务(6):声明式事务

并参考摘录以下文章内容进行整理:
http://www.mamicode.com/info-detail-1248286.html
http://blog.csdn.net/owen_william/article/details/51815605

事务介绍

事务一般发生在和持久层打交道的地方,比如数据库。
假设一个工作由两件事共同组成,那么这两件事要么全部完成,这个工作才算完成。要么全部回退到初始状态。不存在只完成一件,还有一件事没完成的。这项工作可称为一个事务。常用的场景就是银行转账。A向B转账100元这项工作由两件事组成:A帐户减100元,B账户加100元。这两件事要么同时完成,要么同时都回退到初始状态。如果只完成其中一件,另一件没完成,那就出岔子了。。

事务有四个特性:ACID

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

Spring事务支持

Spring可以使用编程式事务,也可以使用声明式事务。不过一般用的多的是用声明式。

Spring使用AOP生成一个代理对象来支持声明式事务,使得我们无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作。再也无需要我们在与事务相关的方法中处理大量的try…catch…finally代码。

比如,我们声明了一个事务方法methodTest()

@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void methodTest() {
// do something
}

当调用

main{  
    methodTest();
} 

相当于执行(只是举个例子,伪代码。不同的事务管理器内部实现都不同)

Main{ 
Connection con=null; 
try{ 
    con = getConnection(); 
    con.setAutoCommit(false); 
    //方法调用
    methodTest(); 
    //提交事务
    con.commit(); 
} 
Catch(RuntimeException ex){ 
    //回滚事务
    con.rollback();   
} 
finally{ 
    //释放资源
    closeCon(); 
} 
}  
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值