Spring事物管理简介 (转)

一、事物1、什么是事物

事物指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败

2、事物的特性

原子性:事物是一个不可分割的工作单位,事物中的操作要么都发生,要么都不发生

一致性:事物前后数据的完整性必须保持一致

隔离性:指多个用户并发访问数据库时,一个用户的事物不能被其他用户的事物所干扰,多个并发事物之间数据要相互隔离。

持久性:一个事物一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响。

二、事物的API介绍

Spring事物管理高层抽象主要包括3个接口:PlatformTransactionManager(事务管理器)、TransactionDefinition(事物定义信息)、TransactionStatus(事物具体运行状态)。

1、PlatformTransactionManager

Spring为不同的持久化框架提供了不同PlatformTransactionManager接口实现

2、TransactionDefinition(1)定义隔离级别

如果不考虑隔离性,会引发如下安全问题:脏读、不可重复读、幻读

脏读:一个事物读取了另一个事物改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。

不可重复读:在同一个事物中,多次读取同一数据返回的结果有所不同

幻读:一个事物读取了几行记录后,另一个事物插入一些记录,幻读就发生了,在后来的查询中,第一个事物就会发现有些原来没有的记录。

事物的隔离级别就是用来解决以上问题:

Mysql数据库用的是REPEATABLE_READ隔离级别

Oracle数据库用的是READ_COMMITTED隔离级别

(2)定义事物传播行为

三、实战

Spring支持俩种方式事务管理

--编程式的事务管理

◎在实际应用中很少使用

◎通过TransactionTemplate手动管理事物

--使用XML配置声明式事物

◎开发中推荐使用(代码侵入性最小)

◎Spring的声明式事物是通过AOP实现的

1、编程式事务管理

手动编写代码进行事物管理(很少使用)

(1)在AccountService中使用TransactionTemplate

(2)TransactionTemplate依赖DataSourceTransactionManager

(3)DataSourceTransactionManager依赖DataSource构造

2、声明式事务管理

(1)基于TransactionProxyFactoryBean的方式

缺点:每需要对一个类进行事物管理,就需要配置一次,维护不方便

(2)基于AspectJ的XML方式(经常使用)

3、基于注解的方式(经常使用)

在需要事物管理的类上面加上注解

原文地址:https://www.cnblogs.com/guanbin-529/p/11042717.html

时间: 2024-10-12 10:21:19

Spring事物管理简介 (转)的相关文章

MyBatis6:MyBatis集成Spring事物管理(下篇)

前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基础上稍微做一点点的进阶:多数据的事物处理.文章内容主要包含两方面: 1.单表多数据的事物处理 2.多库/多表多数据的事物处理 这两种都是企业级开发中常见的需求,有一定的类似,在处理的方法与技巧上又各有不同,在进入文章前,先做一些准备工作,因为后面会用到多表的插入事物管理,前面的文章建立了一个Student相关

spring 事物管理特性

采用编程式事务1. getCurrentSession()与openSession()的区别? * 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的session则不会 * 采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession创建的session必须手动关闭 2.使用getCurrentSession()需要在hibernate.cfg.xm

spring事物管理--声明式(AspectJ)(推荐使用)

1.表结构及数据 2.需引入的jar包: 3.业务层(Service).持久层(Dao)接口与实现类 Service接口: //转账案例业务层接口 public interface AccountService { /** * @param out :转出账号 * @param in :转入账号 * @param money :转账金额 */ public void transfer(String out,String in,Double money); } Service实现类: //转账案例

集成Spring事物管理

单独使用MyBatis对事物进行管理 前面MyBatis的文章有写过相关内容,这里继续写一个最简单的Demo,算是复习一下之前MyBatis的内容吧,先是建表,建立一个简单的Student表: create table student ( student_id int auto_increment, student_name varchar(20) not null, primary key(student_id) ) 建立实体类Student.java: public class Studen

Spring入门第4天--Spring事物管理

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.06.24 lutianfei none 事务 事务:是逻辑上一组操作,要么全都成功,要么全都失败. 事务特性:ACID 原子性:事务不可分割 一致性:事务执行的前后,数据完整性保持一致. 隔离性:一个事务执行的时候,不应该受到其他事务的打扰 持久性:一旦结束,数据就永久的保存到数据库. 如果不考虑隔离性: 脏读:一个事务读到另一个事务未提交数据 不可重复读:一个事务读到另一个事务已经提交数据(update)导致一个事

spring 事物管理

1 在spring中支持编程式事物和声明式事务管理,通常使用声明式事物管理,声明式的事物管理是基于aop机制实现的使用很方便. 2 spring支持单一数据库资源的事物管理和跨越多个数据库资源的事物管理既JTA全局事物. 3 在spring中提供了多个事物管理类,常用的是;DataSourceTransactionManager,HibernateTransactionManager和JtaTransactionManager. DataSourceTransactionManager :数据源

spring事物管理--声明式(AspectJ)注解实现 (推荐使用)

1.表结构及数据 2.使用的jar包 3.service.Dao层接口与实现类: Dao接口: //转账案例持久层接口 public interface AccountDao { /** * @param out :转出账号 * @param money :转账金额 */ public void outMoney(String out,Double money); /** * @param in :转入账号 * @param money :转账金额 */ public void inMoney(

spring事物管理

一)spring的事务管理     事务管理并非spring独有,用过JDBC hibernate的朋友都知道,这些api和框架都提供了自己的事务管理机制.那么spring的事务管理又有些什么与众不同支持呢?它的优点又有哪些呢?总结来说大概有以下这么几点: 1' 为不同的事务API提供一致的编程模型,如Java Transaction API (JTA).JDBC.Hibernate.JavaPersistenceAPI(JPA)以及JavaDataObjects(JDO) 2' 支持decla

MyBatis5:MyBatis集成Spring事物管理(上篇)

前言 有些日子没写博客了,主要原因一个是工作,另一个就是健身,因为我们不仅需要努力工作,也需要有健康的身体嘛. 那有看LZ博客的网友朋友们放心,LZ博客还是会继续保持更新,只是最近两三个月LZ写博客相对会慢一些,博客的内容也会更偏向于实战一些,主要是对于工作中遇到一些比较实际性的问题进行总结与研究,并整理成文与网友朋友们分享. 灵感来源于生活,灵感也来源于工作,今天LZ博文的内容就是MyBatis与Spring事物集成的问题,后面的文章写作宗旨就是尽量写得详细点,把东西能给网友朋友们说清楚,OK