Spring事务管理总结
本文是对慕课网上"搞定SSM开发"路径的系列课程的总结,详细的项目文档和课程总结放在github上了.点击查看
本文对应慕课网上课程Spring事务管理,详情可查看:点我
1: 概念简析
- 事务:逻辑的一组操作,要么一起成功,要么一起失败。
- 事务的特性:
- 原子性:不可分割,要么都发生,要么都不发生
- 一致性:数据完整性保持一致
- 隔离性:不同的事务操作不能相互影响 (隔离级别)
- 持久性:事务提交后,对数据的改变是永久的
PlatformTransactionManager:
事务管理器类,不同持久化框架(例如JDBC,Hibernate,Mybatis|Mybatis好像使用和JDBC同一样的事务管理器实现类)对应不同实现类,注意具体使用时查询
TransactionDefinition:
数据库在查询数据时,由于种种原因会发生以下三种问题.
脏读 :读到还未修改的;
不可重复读:在多次读同一记录过程中,另外事务提交修改,导致读取前后内容不同;
幻读 :和不可重复读类似,不过另外一个事务插入而非修改
隔离级别 : 就是为了解决以上问题设定的事务相关的属性
READ_UNCOMMITED
READ_COMMITTED
REPEATABLE READ
SERIALIZABLE
以上四个级别一层层更严格,执行效率也越来越低.
最后的那个级别会导致所有事务呈线性执行
传播行为:用来支持Spring的事务管理的属性,确定哪些操作会在被包含在同一个事务里
PROPAGATION_REQUIRED 支持当前事务,如果不存在,就创建一个
PROPAGATION_SUPPORTS 具体查看相关文档
PROPAGATION_MANDATORY 。。。。
....
sql执行可以使用模板,也可以拿到sqlConnection之后自己执行,但是执行模板确实是最方便的方法
TransactionStatus:可以得到当前事务的相关属性
2: 编程式事务管理
1:配置事务管理器platformTransactionManager
对于jdbc 需要datasourceTransactionManager 其中必须定义数据源属性dataSource,jdbc中是c3p0的连接池
2:事务管理的模板(注意和sql模板不同) transactionTemplate 事务管理模板,其属性就是上面对应的事务管理器.
3:在需要事务管理的代码处使用内部匿名类来执行运行sql的代码,这样将所有的操作后台的sql都会放在同一个事务中.
3:声明式事务管理
1:首先还是要配置事务管理器
2:配置事务管理具体方法
经典ProxyFactoryBean(使用动态代理的技术,用法已经渐渐废弃)
需要配置TransactionProxyFactoryBean 属性包括target(标注哪个Bean需要事务管理) 和 事务管理器(上面配置的),在bean的配置中通过property来配置事务的传播行为和隔离级别. (只能对一个目标进行配置,就是那个target,不好用)使用aop来进行事务管理
使用基于AspectJ的Spring AOP来管理
xml配置:
配置通知<tx:advice>
配置切面<aop:aspect>,在切面中配置通知和切点.注解配置:
@Transactional即可配置;对需要的类配置,同时也可配置相关的隔离级别和传播行为属性.
相关的dao层配置请查看本系列文档关于Mybatis的总结
Spring事务管理总结的更多相关文章
- 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】
一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...
- spring事务管理器设计思想(二)
上文见<spring事务管理器设计思想(一)> 对于第二个问题,涉及到事务的传播级别,定义如下: PROPAGATION_REQUIRED-- 如果当前没有事务,就新建一个事务.这是最常见 ...
- spring事务管理器设计思想(一)
在最近做的一个项目里面,涉及到多数据源的操作,比较特殊的是,这多个数据库的表结构完全相同,由于我们使用的ibatis框架作为持久化层,为了防止每一个数据源都配置一套规则,所以重新实现了数据源,根据线程 ...
- 事务管理(下) 配置spring事务管理的几种方式(声明式事务)
配置spring事务管理的几种方式(声明式事务) 概要: Spring对编程式事务的支持与EJB有很大的区别.不像EJB和Java事务API(Java Transaction API, JTA)耦合在 ...
- Spring事务管理器的应对
Spring抽象的DAO体系兼容多种数据访问技术,它们各有特色,各有千秋.像Hibernate是非常优秀的ORM实现方案,但对底层SQL的控制不太方便:而iBatis则通过模板化技术让你方便地控制SQ ...
- Spring事务管理(转)
1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是 ...
- [Spring框架]Spring 事务管理基础入门总结.
前言:在之前的博客中已经说过了数据库的事务, 不过那里面更多的是说明事务的一些锁机制, 今天来说一下Spring管理事务的一些基础知识. 之前的文章: [数据库事务与锁]详解一: 彻底理解数据库事务一 ...
- Spring 事务管理 01 ——
目录: 参考: 1.Spring 事务管理高级应用难点剖析: 第 1 部分
- Spring 事务管理原理探究
此处先粘贴出Spring事务需要的配置内容: 1.Spring事务管理器的配置文件: 2.一个普通的JPA框架(此处是mybatis)的配置文件: <bean id="sqlSessi ...
- Spring 事务管理高级应用难点剖析--转
第 1 部分 http://www.ibm.com/search/csass/search/?q=%E4%BA%8B%E5%8A%A1&sn=dw&lang=zh&cc=CN& ...
随机推荐
- C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
一.引言 今天我们开始讲"行为型"设计模式的第三个模式,该模式是[迭代器模式],英文名称是:Iterator Pattern.还是老套路,先从名字上来看看."迭代器模 ...
- 裸板驱动总结(makefile+lds链接脚本+裸板调试)
在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示: 然而此时的SDRAM.nandflash的控制时序等都还没初始化,所以我们就只能使用前0~40 ...
- c语言的字符串
1. 字符串 1. 什么是字符串 ● 简单的字符串”itcast” ● 一个’i’是一个字符 ● 很多个字符组合在一起就是字符串了 2. 字符串的初始化 ● char a[] = “123”; ...
- linux端口开放指定端口的两种方法
重要的事情说三遍,强烈建议使用第二种方法!第二种方法!第二!; 开放端口的方法: 方法一:命令行方式 1. 开放端口命令: /sbin/iptables -I INPUT ...
- O(N^2)最长上升子序列
//最长上升子序列o(N^2)可以不连续的子序列, //状态为maxlen[i]表示以a[i]为终点最大上升子序列长度 #include<iostream> #include<cst ...
- yii2.0中添加二维数组,多条数据。
/** * @inheritdoc 批量添加 * @params $add array 添加数据 */public function add_all($add){ $connection = \Yii ...
- UWP ListView下模板宽度问题
在ListView中模板的宽度默认不会根据listView的宽度改变为改变,这需要更改一下设置,重点在于设置HorizontalContentAlignment的拉伸模式.注意是HorizontalC ...
- css的padding和border问题
第一步:先跟据需求定义一个div,要求width为300px,height为300px: 第二步:给该div添加一个边框,要求实线,宽度10px,粉色: 第三步:给该div再设置20px的内边距: 我 ...
- huangwenlong and hanqihong开光的dijkstra
#include<iostream> #include<vector> #include<queue> #include<cstring> #inclu ...
- javac 小记
javac 到底是什么? javac 就是一个编译器,它把 Java 源代码编译成 Java 字节码,即 JVM 能够识别的二进制形式的文件. javac 由什么构成? 词法分析器:识别源代码中的 J ...