事务处理

Spring事务组件 源码阅读(Spring声明式事务处理)

☆樱花仙子☆ 提交于 2020-01-16 00:41:21
1 设计原理与基本过程 在使用Spring声明式事务处理的时候,一种常用的方法是结合IoC容器和Spring已有的TransactionProxyFactoryBean对事务管理进行配置,比如,可以在这个TransactionProxyFactoryBean中为事务方法配置传播行为、并发事务隔离级别等事务处理属性,从而对声明式事务的处理提供指导。具体来说,在对声明式事务处理的原理分析中,声明式事务处理的实现大致可以分为以下几个部分: 读取和处理在IoC容器中配置的事务处理属性,并转化为Spring事务处理需要的内部数据结构,这里涉及的类是TransactionAttributeSourceAdvisor,从名字可以看出,它是一个AOP通知器,Spring使用这个通知器来完成对事务处理属性值的处理。处理的结果是,在IoC容器中配置的事务处理属性信息,会被读入并转化成TransactionAttribute表示的数据对象,这个数据对象是Spring对事物处理属性值的数据抽象,对这些属性的处理是和TransactionProxyFactoryBean拦截下来的事务方法的处理结合起来的。 Spring事务处理模块实现统一的事务处理过程。这个通用的事务处理过程包含处理事务配置属性,以及与线程绑定完成事务处理的过程

Spring 事务处理

点点圈 提交于 2020-01-15 00:49:13
前言: 事务处理的本质 在学习事务处理前,需要明确一点: 数据库操作最终都要使用到JDBC,那么无论上层如何封装,底层都是调用Connection的commit,rollback来完成 烦人的事务处理: 在日常开发中,数据访问层(DAO)必然需要进行事务的处理,但是我们会发现,事务处理的代码通常是简单的重复的,编写这样的重复代码会浪费大量的时间,所以我们需要找到一种方案可以将这些重复的代码进行抽取,以便与管理维护和复用, 我们的需求:在一系列数据库操作上的方法上增加额外的事务处理代码,让原来的方法中只关注具体的数据处理,即在原本以及存在的数据库操作方法上添加额外的事务处理逻辑 到这里你应该想到AOP了,没错! 这样的场景下AOP是最好的解决方案; 解决方案:AOP 回顾一下Spring的AOP:在结合目前的需求 1.将目标对象(DAO)放入Spring容器 2.告知Spring你的通知代码是什么(事务处理) 3.告知Spring 哪些方法(DAO的CRUD)要应用那些通知(不同的事务处理代码) 4.从Spring中获取代理对象来完成原本的CRUD,代理对象会自动完成事务处理 Spring 事务处理API Spring作为框架,需要进行详细的设计,全方位的考虑事务处理的各个方面,而不仅是简单的帮你执行commit,rollback; Spring对事务处理进行了抽象定义

Spring AOP事务处理

我的未来我决定 提交于 2020-01-11 03:38:38
4.1Spring 中事务简介 4.1.1事务定义 事务(Transaction)是一个业务,是一个不可分割的逻辑工作单元,基于事务可以更好的保证业务的正确性。 4.1.2事务特性 事务具备ACID特性,分别是: 原子性(Atomicity):一个事务中的多个操作要么都成功要么都失败。 一致性(Consistency):(例如存钱操作,存之前和存之后的总钱数应该是一致的。 隔离性(Isolation):事务与事务应该是相互隔离的。 持久性(Durability):事务一旦提交,数据要持久保存。 4.1.3案例分析 现有两个订单业务操作,在下单时需要执行更新库存。 当库存充足时,如图-11所示: 图-11 当库存不足时,如图12所示: 图-12 4.2Spring 中事务管理 4.2.1Spring 中事务方式概述 Spring提供了两种事务管理方式, 编程式事务和声明式事务。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。通过声明式事务管理可以更好使业务代码逻辑不受污染或少量污染, 因此在实际使用中声明式事务用的比较多。 Spring 声明式事务管理将开发者从繁复的事务管理代码中解脱出来,专注于业务逻辑的开发上,这是一件可以被拿来顶礼膜拜的事情。从具体配置实现上,Spring框架提供了两种配置方式:一种是基于xml方式做配置实现

Oracle数据库创建存储过程、函数、包(六)

让人想犯罪 __ 提交于 2020-01-09 18:17:57
一、存储过程 存储过程简介 a、 在Oracle中的存储过程又名子程序; b、 命名的PL/SQL块,编译并存储在数据库中; c、 存储过程的各个部分: 声明部分; 可执行部分; 异常处理部分(可选)。 d、存储过程的分类: 过程-执行某些操作; 函数-执行操作并返回值; 存储过程的优点 a、 模块化: 将程序分解为逻辑模块; b、 可重用性: 可以被任意数目的程序调用; c、 可维护性: 简化维护操作; d、 安全性: 通过设置权限,使数据更安全。 创建存储过程的语法 --创建存储过程: create [ or replace ] procedure 存储过程名称 [ ( 参数名称 参数类型 , 参数名称 参数类型 ) ] is | as 局部变量声明区 begin [ 可执行 SQL 语句; ] [ exception 异常处理语句 ] end 过程名称 ; --调用存储过程 begin 过程名称 [ ( 参数名称 参数类型 , 参数名称 参数类型 ) ] ; end ; 例子: in参数存储过程: --3. 创建一个带参数的存储过程,根据制定的参数删除一个员工。 --创建存储过程: create or replace procedure emp2 ( theEmpNo emp . empNo % type ) as begin delete from emp where

【springboot】事务处理

孤街浪徒 提交于 2020-01-06 21:35:48
转自:   https://blog.csdn.net/cp026la/article/details/86496788 扯淡:   复杂的业务逻辑中一个请求可能需要多次操作数据库,要保证一个Service 方法中多个 dao 的操作同时成功(失败),事务的配置就很重要了。 大概分三种情况:   1、分布式事务:即多模块中事务,分布式事务建议是可以避免就避免,可以使用消息中间件处理,但也不能完全解决。   2、多线程事务:参考:https://blog.csdn.net/kongkongyanan/article/details/81703415   3、单模块中的事务,本章的重点,也是开发中遇到的最多的,这里给出两种配置方式。   本章分别使用注解 @Transactional (springboot默认推荐)和 AOP 全局配置的方式: pom 依赖(延续上一章代码)增加aop的依赖: <!-- aop --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> 一、事务演示: 需要引入spring-boot-starter-jdbc依赖,但是我们集成了mybatis,已经包含了该依赖

SQL Server查询优化与事务处理

早过忘川 提交于 2020-01-03 08:05:28
博文目录 一、索引 二、视图 三、存储过程 四、系统存储过程 五、触发器 六、事务 七、锁 一、索引 索引提供指针以指向存储在表中指定列的数据值,然后根据指定的次序排列这些指针,再跟随指针到达包含该值的列。 1、什么是索引 数据库中的索引与书籍中的目录相似。在一本书中,无需阅读整本书,利用目录就可以快速的查找到所需的信息。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需的数据。书中的目录就是一个词语列表,其中注明了包含各个词的页码。而数据库中的索引是某个表中一列或若干列值的集合,以及物理表示这些值得数据业的逻辑指针清单。 索引是SQL Server编排数据的内部方法,它为SQL Server提供一种方法来编排查询数据的路由。 索引页是数据库中存储索引的数据页。索引页存放检索数据行的关键字页以及该数据行的地址指针。通过使用索引,可以大大提高数据库的检索速度,改善数据库性能。 2、索引分类 1)唯一索引 唯一索引不允许两行具有相同的索引值。 如果现有数据中存在重复的键值,则一般情况下大多数数据库不允许创建唯一索引。当新数据使表中的键值重复时,数据库也拒绝接收此数据。创建了唯一约束,将自动创建唯一索引。尽管唯一索引有助于找到信息,但是为了获得最佳性能,建议使用主键约束。 2)主键索引 在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。

MYSQL数据库引擎区别详解

风流意气都作罢 提交于 2020-01-01 05:29:41
数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用。如果技术高超,还可以使用MySQL+API自己做一个引擎。下面介绍几种数据库引擎: ISAM :ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到 数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不 支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实 时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。 MyISAM :MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具

SQLite学习笔记(七)&&事务处理

自作多情 提交于 2019-12-29 03:01:06
说到事务一定会提到ACID,所谓事务的原子性,一致性,隔离性和持久性。对于一个数据库而言,通常通过并发控制和故障恢复手段来保证事务在正常和异常情况下的ACID特性。sqlite也不例外,虽然简单,依然有自己的并发控制和故障恢复机制。 Sqlite学习笔记(五)&&SQLite封锁机制 已经讲了一些锁机制的原理,本文将会详细介绍一个事务从开始,到执行,最后到提交所经历的过程,其中会穿插讲一些sqlite中锁管理,缓存管理和日志管理的机制,同时会介绍在异常情况下(软硬件故障,比如程序异常crash,主机掉电等),sqlite如何将数据库恢复到事务之前的状态。本文大量参考了sqlite的官方文档,结合自己的理解,希望能把这个过程说清楚。 1.事务提交 1.1 开启一个事务 在向数据库文件写数据前,sqlite首先需要访问sqlite_master表获取元数据信息,用来对SQL语句进行语义分析,判断语句的合法性。从数据库读数据第一步,是对数据库文件上一个Shared Lock。Shared Lock允许多个事务同时读一个数据库文件,但是Shared Lock会阻止写事务向数据库文件写入数据。 1.2 读数据 获取Shared Lock后,我们可以从数据库文件中读取数据了。我们假设缓存中没有我们的page,因此需要通过读文件读取我们需要的page。这里说明下

SQL Server-SQL事务处理(Stransaction)

不羁的心 提交于 2019-12-29 01:50:59
ylbtech-SQL Server:SQL Server-SQL事务处理(Stransaction) SQL Server中的SQL事务处理(Stransaction)。 1,SQL事务处理(Stransaction) -- ============================================== -- title:事务处理 -- author:ylbtech -- pubdate:22:24 2012/12/24 -- ============================================== go -- ============================================== -- 1,事务概述 -- desc:事务是一些列的任务组的逻辑工作单元格,这个逻辑单元中的所有任务必须作为一个整体 -- 要么都完成要么都失败。 -- ============================================== go -- ============================================== -- 2,事务的特性 -- desc:事务是作为单个逻辑工作单元格执行的一系列工作。一个逻辑工作单元必须有以下4个属性 -- 才能成为一个事务。 -- a)原子性 -- b)一致性 -- c)隔离性

DB----事务处理

折月煮酒 提交于 2019-12-27 05:37:19
事务处理 将对数据库进行隔离,acid(原子性,一致性,隔离性,持久性) 只有INnoDB类型的表支持事物处理 在 autocommit=false 的情况下操作 insert / update / delete (也就是对数据的更改),如果不明确的指定是否commit或者rollback,对外面的数据是没有影响的。 MyIsam 数据库引擎不起作用,修改: alter table t1 engine = innodb [ AUTO_INCREMENT = 1 CHARSET = utf8 comment '数据引擎修改' ] show create table t1 ; 一般设置 set autocommit = 0 ; 自动提交机制 start transaction ; 开启一个事务 demo 一个汇钱的过程 delete from t1 where id = 11 ; 执行操作 update t1 set money = money - 5000 where uid = '001' update t1 set money = money + 5000 where uid = '002' savepoint p1 ; 保存 , 设置还原点 rollback to p1 ; 恢复到p1的原点 防插入锁–自动识别死锁 防插入锁 SELECT * FROM tablename