Spring总结九:事务管理机制
何为事务
事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
简单来说就是一组通过程序操作数据库的操作,要么全部成功,要么全部失败。
事务的ACID四大特性:
原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。
一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。
隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。
持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。
Spring事务管理的三个高层接口:
1,PlatformTransactionManager 平台相关事务管理器
TransactionManager是整个spring事务管理核心对象,提供管理事务相关方法


项目开发时,使用不同持久层技术,就需要使用spring提供不同事务管理器 JDBC编程 --- 通过Connection进行事务管理 开启事务 conn.setAutoCommit(false); 提交事务 conn.commit(); 回滚事务 conn.rollback();、 conn.rollback(SavePoint ); Spring 提供 DataSourceTransactionManager 针对Connection进行事务管理 Spring 提供 HibernateTransactionManager 针对 session进行事务管理
2,TransactionDefinition 事务定义信息 (在使用spring管理事务,对事务管理配置信息 )
TransactionDefinition 主要指 spring管理事务过程中,配置如何对事务进行管理
(隔离级别、传播行为、超时时间、 是否只读)

get Name 获取事务名称 getIsolationLevel 获取事务隔离级别

脏读:一个事务读取另一个事务 未提交的数据 ---- 非常严重安全问题 不可重复读:一个事务读取另一个事务已经提交数据,先后读取两次,结果不一样(另一个事务进行update操作) 幻读:一个事务中先后读取两次,发现数据记录条数不一样(另一个事务进行insert操作 )
数据库为了解决 隔离性引发几种问题,提供四种隔离级别
read uncommitted 引发所有隔离问题、
read committed 阻止脏读发生、发生不可重复读和幻读、
repeatable read 阻止脏读、不可重复读发生,可能发生幻读、
serializable 阻止所有隔离问题
不是所有数据库都支持四种隔离级别, oracle只支持 read committed、serializable ; mysql支持所有隔离级别
DEFAULT 代表默认数据库隔离级别,oracle 默认级别 read committed、 mysql 默认级别 repeatable read
getPropagationBehavior 获取事务的传播行为
什么是传播行为?
和隔离级别不同,不是数据库提供问题解决方案,而是spring针对实际开发中具体事务问题,引入事务解决方案,解决两个事务互相调用的问题 !

Spring为了解决上面的问题,提供七种传播行为

REQUIRED、SUPPORTS、MANDATORY:支持当前事务 (删除用户、删除订单) 操作同一事务
REQUIRES_NEW、NOT_SUPPORTED、NEVER:不支持当前事务 (ATM取钱、打印凭条) 操作不同事务
NESTED 嵌套事务,只对DataSourceTransactionManager 有效,底层原理SavePoint 一个事务,允许回滚到事务中的某个保存的点,然后继续执行
3,TransactionStatus 事务运行状态
指事务运行过程中,某个时间点事务状态信息

用户想使用spring进行事务管理 ,对事务管理进行配置(TransactionDefinition),选用针对持久层技术事务管理器 TransactionManager, TransactionManager根据TransactionDefinition 进行事务管理,在事务管理过程中通过 TransactionStatus获取当时事务状态 。
Spring事务管理的两种方式:
1、 编程式事务管理,在需要事务管理目标代码中,添加事务管理的代码 (有代码侵入事务管理方式 ,现在使用的非常少 )
在spring配置TransactionManager ,将transactionManager对象注入到 TransactionTemplate 对象中,将transactionTemplate 注入到目标程序中
transactionTemplate.execute(new TransactionCallbackWithoutResult(){
doInTransaction(){
// 将需要事务管理代码,加在这里
}
});
如果方法没有异常,事务提交,如果方法发生异常,事务回滚
2、 声明式事务管理,底层使用AOP的环绕通知,没有任何代码侵入,现在开发中推荐使用 。
-----------------------------------------------------------下一篇写简单案例
Spring总结九:事务管理机制的更多相关文章
- Spring入门5.事务管理机制
Spring入门5.事务管理机制 20131126 代码下载 : 链接: http://pan.baidu.com/s/1kYc6c 密码: 233t 回顾之前的知识,Spring 最为核心的两个部分 ...
- Spring事务管理机制的实现原理-动态代理
之前在做项目中遇到spring无法进行事务代理问题,最后发现是因为没有写接口,原因当时明白了,看到这篇文章写的清楚些,转过来 我们先来分析一下Spring事务管理机制的实现原理.由于Spring内置A ...
- spring 事务管理机制
1. spring 事务管理抽象 spring 的事务策略机制的核心就是 org.springframework.transaction.PlatformTransactionManager 接口. ...
- Spring入门6事务管理2 基于Annotation方式的声明式事务管理机制
Spring入门6事务管理2 基于Annotation方式的声明式事务管理机制 201311.27 代码下载 链接: http://pan.baidu.com/s/1kYc6c 密码: 233t 前言 ...
- Spring 框架基础(05):事务管理机制,和实现方式
本文源码:GitHub·点这里 || GitEE·点这里 一.Spring事务管理 1.基础描述 Spring事务管理的本质就是封装了数据库对事务支持的操作,使用JDBC的事务管理机制,就是利用jav ...
- [转]Spring3核心技术之事务管理机制
原文地址:http://chouyi.iteye.com/blog/1675199 Spring对事务的解决办法其实分为2种:编程式实现事务,AOP配置声明式解决方案. http://jinnians ...
- Spring学习8-Spring事务管理(编程式事务管理)
一.Spring事务的相关知识 1.事务是指一系列独立的操作,但在概念上具有原子性. 比如转账:A账号-100, B账号+100,完成.这两个操作独立是没问题的. 但在逻辑上,要么全部完成,要么一 ...
- Spring对Hibernate事务管理
谈Spring事务管理之前我们想一下在我们不用Spring的时候,在Hibernate中我们是怎么进行数据操作的.在Hibernate中 我们每次进行一个操作的的时候我们都是要先开启事务,然后进行数据 ...
- Spring中的事务管理
事务简介: 事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性 事务就是一系列的动作,它们被当作一个单独的工作单元.这些动作要么全部完成,要么全部不起作用 事务的四个关键属性( ...
随机推荐
- Comparing Xamarin and Delphi XE5 to Xcode for Cross Platform Mobile App Development
Comparing Xamarin and Delphi XE5 to Xcode for Cross Platform Mobile App Development If you are consi ...
- 看过自会理解, Photon Server 常见概念分析.
http://stackoverflow.com/questions/10823915/photon-server-newbie-questions/11653419#11653419 Channel ...
- 从无到有开发自己的Wordpress博客主题---局部模板的准备
毫无疑问,我们媒体页面都会有header和footer,这些用到的内容几乎是一样的. 从无到有,我们先不考虑后面可能用到的Search和Comment等的模板,后面的我会在文本最后面追加. 开始之前, ...
- 特例模式(Special Case Pattern)与空对象模式(Null Pointer Pattern)—— 返回特例对象而非 null
返回 null 值,基本上是在给自己增加工作量,也是给调用者添乱.只有一处没有检查返回的是否为 null,程序就会抛 NullPointerException 异常. 如果你打算在方法中返回 null ...
- SVN客户端与服务器端搭建操作
一.客户端的安装 1.点击安装程序 2.修改svn安装位置 3.开始安装 4.客户端安装成功 5.回到左面 右键出现svn检出 tortoiSVN 表示安装成功 Myeclipse svn插件安装 ...
- NOIP2013 DAY2题解
DAY2 T1积木大赛 传送门 题目大意:每次可以选区间[l,r]加1,最少选几次,让每个位置有 它应有的高度. 题解:O(n)扫一遍就好了.后一个比前一个的高度低,那么前一个已经把它覆盖了, 如果高 ...
- Angular2语法指南
引导 import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; platformBrowserDynami ...
- 两种方式创建Maven项目【方式一】
经常使用maven进行项目的管理,今天整理两种方式创建maven项目及创建过程中碰到的问题怎么解决: 方式一: 1.新建maven项目,点击下一步. 2.勾选Create a simple proje ...
- FastAdmin 学习线路 (2018-09-09 增加 Layer 组件)
FastAdmin 学习线路 (2018-09-09 增加 Layer 组件) 基础 HTML CSS DIV Javascript 基础 jQuery php 基础 对象 命名空间 Apache 或 ...
- Oracle数据文件和临时文件的管理
一.数据文件概述在Oracle数据库中,SYSTEM和SYSAUX表空间至少需要包含一个数据文件,此外还将包含多个其他表空间及与其相关的数据文件和临时文件.Oracle的数据文件和临时文件是操作系统文 ...