Spring事务总结

2016-09-08  本文已影响70人  niaoge2016

定义

逻辑上的一组操作,要么全做,要么全不做。

四大特性(简称ACID):

常用API

3个主要接口

事务隔离级别
如果不考虑隔离性,会引发安全问题:
1.脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。
2.不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。
3.幻读(虚读):一个事务读取几行记录后,另一个事务插入一些记录,幻读就发生了。在后来的查询中,第一个事务就会发现有些原来没有的记录。

事务隔离级别

补充:
(1)Mysql 默认采用的 REPEATABLE_READ隔离级别
(2)Oracle 默认采用的 READ_COMMITTED隔离级别

事务传播行为

事务传播行为

补充:
第一类共同点:如果 A 方法中有事务,则调用 B 方法时就用该事务,即:A和B方法在同一个事务中。PROPAGATION_REQUIRED:如果 A 方法中没有事务,则调用 B 方法时就创建一个新的事务,即:A和B方法在同一个事务中。PROPAGATION_SUPPORTS:如果 A 方法中没有事务,则调用 B 方法时就不使用该事务。PROPAGATION_MANDATORY:如果 A 方法中没有事务,则调用 B 方法时就抛出异常。
第二类共同点:A方法和B方法没有在同一个事务里面。PROPAGATION_REQUIRES_NEW:如果 A 方法中有事务,则挂起并新建一个事务给 B 方法。PROPAGATION_NOT_SUPPORTED:如果 A 方法中有事务,则挂起。PROPAGATION_NEVER:如果 A 方法中有事务,则报异常。
第三类:如果 A 方法有的事务执行完,设置一个保存点,如果 B 方法中事务执行失败,可以滚回保存点或初始状态。

重点的三种:PROPAGATION_REQUIRED, PROPAGATION_REQUIRES_NEW, PROPAGATION_NESTED。

编程式事务

实际中很少使用
通过TransactionTemplate手动管理事务

声明式事务

开发过程中推荐使用
通过使用AOP实现
在配置文件XML中
使用方式

上一篇 下一篇

猜你喜欢

热点阅读