Spring 事务——事务介绍以及事务在Spring框架中的基本实现

事务介绍

事务一般发生在和持久层打交道的地方,比如数据库。
假设一个工作由两件事共同组成,那么这两件事要么全部完成,这个工作才算完成。要么全部回退到初始状态。不存在只完成一件,还有一件事没完成的。这项工作可称为一个事务。常用的场景就是银行转账。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(); 
	} 
}  

猜你喜欢

转载自blog.csdn.net/m0_37556444/article/details/83146466
今日推荐