事务管理

05. Spring的事务管理

人盡茶涼 提交于 2020-02-24 04:51:23
Spring的事务管理 1. 事务管理核心接口 1.1 PlatformTransactionManager 1.2 TransactionDefinition 1.3 TransactionStatus 1.4 事务管理的方式 2. 声明式事务管理 2.1 基于XML方式的声明式事务 2.2 基于Annotation方式的声明式事务 1. 事务管理核心接口 在Spring的所有JAR包中,包含一个名为spring-tx-4.3.6.RELEASE的JAR包,该包就是Spring提供的用于事务管理的依赖包。 在该JAR包的org.springframework.transaction包中,我们可以找到3个接口文件PlatformTransactionManager、TransactionDefinition和TransactionStatus 1.1 PlatformTransactionManager PlatformTransactionManager接口是Spring提供的平台事务管理器,主要用于管理事务。该接口中提供了3个事务操作的方法,具体如下。 TransactionStatus getTransaction(TransactionDefinition definition):用于获取事务状态信息。· void commit(TransactionStatus

3.1.4 Spring的事务管理

こ雲淡風輕ζ 提交于 2020-02-21 08:03:09
四、 Spring 的事务管理 事务原本是数据库中的概念, 在 Dao层。 但一般情况下, 需要将事务提升到 业务层, 即 Service层。 这样做是为了 能够使用事务的特性来管理具体的业务。 1. Spring事务管理API介绍 (1) 事务管理器是 PlatformTransactionManager接口 对象。 其主要 用于完成事务的提交、 回滚, 及获取事务的状态信息。 PlatformTransactionManager接口 常用的两个实现类 DataSourceTransactionManager: 使用JDBC或MyBatis 进行持久化数据时使用。 HibernateTransactionManager: 使用Hibernate进行持久化数据时使用。 (2) Spring的回滚方式 Spring事务的默认回滚方式是: 发生运行时异常时回滚, 发生受查异常时提交。 (3) 事务定义接口 事务定义接口 TransactionDefinition中定义了 事务描述 相关的三类常量: 事务隔离级别、 事务传播行为、 事务默认超时时限, 及对它们的 操作。 所谓事务传播行为是指, 处于不同事务中的方法在相互调用时, 执行期间事 务的维护情况。 如, A事务中的方法doSome() 调用B事务中的方法doOther() , 在调 用执行期间事务的维护情况, 就称为事务传播行为

Mysql错误编码和解释表

倾然丶 夕夏残阳落幕 提交于 2020-02-20 05:54:22
Mysql错误编码和解释表 1.错误消息的组成 一共由三部分组成 mysql数字错误代码,这个数字的mysql的特定值,不可以移植到其它数据库系统。 一个五位长度的sqlstate值,这些值取自ANSI SQL和ODBC,并且更加标准化。并不是所有的MySQL错误号都具有相应的SQLSTATE值。在这些情况下,使用'HY000' (一般错误)。 错误的消息描述 2.一些额外的说明 如果需要错误检查,请使用错误代码,而不是错误消息。 如果数据库管理员更改语言设置,则会影响错误消息的语言。 错误代码在给定的MySQL系列的GA版本中是稳定的。在系列达到GA状态之前,新的代码可能仍在开发中,可能会发生变化。 错误消息信息在share/errmsg-utf8.txt文件中。 %d并分别%s表示数字和字符串,当它们被显示时被替换成Message值。 share/errmsg-utf8.txt中列出的错误值被用来生成的定义 include/mysqld_error.h和 include/mysqld_ername.hMySQL的源文件。 share/errmsg-utf8.txt列出的SQLSTATE值用于生成include/sql_state.hMySQL源文件中的定义 。 3.错误码和解释 错误:1000SQLSTATE: () HY000 ER_HASHCHK 消息:hashchk 错误

JDBC学习笔记之管理事务(十二)

喜欢而已 提交于 2020-02-19 21:04:01
回顾事务概念 事务 :一个包含 多个步骤 的业务操作。如果这个业务操作被 事务管理 ,则这个步骤要么同时成功,要么同时失败 操作 : 1.开启事务 2.提交事务 3.回滚事务 Connection对象管理事务 方法 : 1.开启事务: setAutoCommit(boolean autoCommit) 调用该方法设置参数为 false ,即开启事务 注意 :在执行sql之前开启事务 2.提交事务: commit() 注意 :当所有sql都执行完提交事务 3.回滚事务: rollback() 注意 :在catch中回滚事务 案例 我们用 account 表写一个转账的案例 代码: package com . zzq ; import util . JDBCUtils ; import java . sql . Connection ; import java . sql . PreparedStatement ; import java . sql . SQLException ; /** * 事务操作 */ public class JDBCDemo12 { public static void main ( String [ ] args ) { Connection conn = null ; PreparedStatement pstmt1 = null ;

Java EE入门(五)——MySQL基础 (多表关系、范式、多表查询、事务、DCL)

元气小坏坏 提交于 2020-02-19 12:13:21
Java EE入门(五)——MySQL基础 (多表关系、范式、多表查询、事务、DCL)   iwehdio的博客园:https://www.cnblogs.com/iwehdio/ 1、多表关系 多表之间的关系: 一对一的关系。 一对多 或 多对一 的关系。 多对多的关系。 一对多关系实现:在多的一方建立外键列,指向一的一方的主键。 多对多关系实现:需要借助第三张中间表,中间表中至少包含两个字段,作为外键分别指向两张表的主键。这两个字段构成了联合主键。 一对一关系实现:在任意一方添加外键列,指向另一方的主键。而且需要在外键列添加唯一约束。 分析示例:用户收藏旅游线路。 三个实体:旅游线路分类、旅游线路、用户。 旅游线路分类和旅游线路是 一对多 的关系。 用户和收藏的旅游线路是 多对多 的关系。 实现: CREATE TABLE category( cid INT PRIMARY KEY AUTO_INCREMENT, cname VARCHAR(100) NOT NULL UNIQUE ); CREATE TABLE route( rid INT PRIMARY KEY AUTO_INCREMENT, rname VARCHAR(100) NOT NULL UNIQUE, CONSTRAINT r_c FOREIGN KEY (rid) REFERENCES category

JDBC总结——事务

本秂侑毒 提交于 2020-02-19 05:24:16
文章目录 事务 一、事务的基本介绍 1、概念 2、操作 3、操作实例 4、MySQL数据库中默认自动提交 二、事务的四大特征 三、事务的隔离级别 1、概念 2、存在的问题 3、隔离级别 四、Jdbc事务控制 1、概述 2、控制事务的API: 3、核心代码 事务 一、事务的基本介绍 1、概念 如果包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。 2、操作 ① 开启事务: start transaction; ② 回滚: rollback; ③ 提交: commit; 3、操作实例 account.sql -- 创建account表 CREATE TABLE account ( id INT PRIMARY KEY AUTO_INCREMENT ; NAME VARCHAR ( 10 ) , balance DOUBLE ) ; -- 添加数据 INSERT INTO account ( NAME , balance ) VALUES ( 'zhangsan' , 1000 ) , ( 'lisi' , 1000 ) ; SELECT * FROM account ; UPDATE account SET balance = 1000 ; --张三给李四转账500元 --0.开启事务 START TRANSACTION ; --1.张三账户-500

10.spring声明式事务

时光毁灭记忆、已成空白 提交于 2020-02-19 00:27:00
一.回顾事务 事务在项目开发过程非常重要,涉及到数据的一致性的问题,不容马虎! 事务管理是企业级应用程序开发中必备技术,用来确保数据的完整性和一致性。 1.事务就是把一系列的动作当成一个独立的工作单元,这些动作要么全部完成,要么全部不起作用。 2.事务四个属性ACID 原子性(atomicity) 事务是原子性操作,由一系列动作组成,事务的原子性确保动作要么全部完成,要么完全不起作用 一致性(consistency) 一旦所有事务动作完成,事务就要被提交。数据和资源处于一种满足业务规则的一致性状态中 隔离性(isolation) 可能多个事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏 持久性(durability) 事务一旦完成,无论系统发生什么错误,结果都不会受到影响。通常情况下,事务的结果被写到持久化存储器中 二.Spring中的事务管理 1.测试事务的一致性 步骤:(在上一个的博客项目的基础上) 在UserMapper接口中添加两个方法 addUser:添加用户 deleteUser:删除用户 在UserMapper.xml中编写SQL语句,故意将delete写成deletes导致出错 修改UserMapperImpl类 添加addUser方法 添加deleteUser方法 修改selectUser方法,让它先添加一个用户

常用分布式事务解决方案

半腔热情 提交于 2020-02-18 14:37:02
出处: https://github.com/clsaa/Distributed-Transaction-Notes 。 作者总结得很全面,做个笔记搬运。 一、 两阶段提交(2PC) 一个基于两阶段提交协议的分布式事务框架(LCN) 二阶段提交(Two-phaseCommit)是指,在计算机网络以及数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法(Algorithm)。通常,二阶段提交也被称为是一种协议(Protocol))。在分布式系统中,每个节点虽然可以知晓自己的操作时成功或者失败,却无法知道其他节点的操作的成功或失败。当一个事务跨越多个节点时,为了保持事务的ACID特性,需要引入一个作为协调者的组件来统一掌控所有节点(称作参与者)的操作结果并最终指示这些节点是否要把操作结果进行真正的提交(比如将更新后的数据写入磁盘等等)。因此,二阶段提交的算法思路可以概括为:参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是中止操作。 所谓的两个阶段是指:第一阶段:准备阶段(投票阶段)和第二阶段:提交阶段(执行阶段)。 1. 准备阶段 事务协调者(事务管理器)给每个参与者(资源管理器)发送Prepare消息,每个参与者要么直接返回失败(如权限验证失败),要么在本地执行事务,写本地的redo和undo日志

分布式事务(理论+实战)

你离开我真会死。 提交于 2020-02-18 13:42:37
分布系统中,如何保证数据的一致性、原子性,分布式事务。分布式事务分为两大类,柔性事务、刚性事务。 一、方法论篇 分布式事务主要分为两部分,刚性事务和柔性事务。刚性事务主要针对DB层面,严格保证事务的原子性要么都成功,要么执行失败,全部回滚。 柔性事务,相对于刚性事务来的,为了保证DB的利用率,以及系统的吞吐量,不会长时间锁定DB资源,在事务执行失败之后不会进行回滚,而是采用补偿的方式保证数据的最终一致性,所以柔性事务又叫补偿型事务。先来介绍刚性事务。 1.1刚性事务 X/Open XA 协议, 最早的分布式事务模型是 X/Open 国际联盟提出的 X/Open Distributed Transaction Processing(DTP)模型,也就是大家常说的 X/Open XA 协议,简称XA 协议。 名词解释: 其中应用程序(Application Program ,简称AP):AP定义事务边界(定义事务开始和结束)并访问事务边界内的资源。 资源管理器(Resource Manager,简称RM):Rm管理计算机共享的资源,许多软件都可以去访问这些资源,资源包含比如数据库、文件系统、打印机服务器等。 事务管理器(Transaction Manager ,简称TM):负责管理全局事务,分配事务唯一标识,监控事务的执行进度,并负责事务的提交、回滚、失败恢复等。 操作过程 第一阶段

JAVA事务系列三:JTA事务

徘徊边缘 提交于 2020-02-17 19:39:20
什么是JTA? JTA全称Java Transaction API ,即Java事务API,英文解释: Java Transaction API (JTA) specifies standard Java interfaces between a transaction manager and the parties involved in a distributed transaction system: the resource manager, the application server, and the transactional applications. JTA是一种高层的,与实现无关的,与协议无关的API,应用程序和应用服务器可以使用JTA来访问事务。 JTA允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据,这些数据可以分布在多个数据库上。JDBC驱动程序的JTA支持极大地增强了数据访问能力。 JTA的主要接口: 位于javax.transaction包中 a、UserTransaction接口:让应用程序得以控制事务的开始、挂起、提交、回滚等。由Java客户端程序或EJB调用。 b、TransactionManager 接口:用于应用服务器管理事务状态 c、Transaction接口:用于执行相关事务操作 d、XAResource接口