jpaspring事务
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于jpaspring事务内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在jpaspring事务相关知识领域提供全面立体的资料补充。同时还包含 j2ee是什么、jar格式、java 的知识内容,欢迎查阅!
jpaspring事务相关知识
-
[分布式]:Java中的事务——JDBC事务和JTA事务我的博客中曾经关于事务有过很多讨论,之前的事务介绍基本都是数据库层面的事务,本文来介绍一下J2EE中和事务相关的内容,在阅读本文之前,希望读者对分布式有一定的了解。关于事务的基础知识这里不再详细介绍,想要了解的同学可以在我的博客中阅读相关文章。Java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务。 常见的容器事务如Spring事务,容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现。所以本文暂不讨论容器事务。本文主要介绍J2EE开发中两个比较基本的事务:JDBC事务和JTA事务。JDBC事务JDBC的一切行为包括事务是基于一个Connection的,在JDBC中是通过Connection对象进行事务管理。在JDBC中,常用的和事务相关的方法是: setAutoCommit、commit、rollback等。下面看一个简单的JDBC事务代码:public void JdbcT
-
SQL Server事务 事务日志事务 (SQL Server)一、事务概念 事务是一种机制、是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行。因此事务是一个不可分割的工作逻辑单元。在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的。这特别适用于多用户同时操作的数据通信系统。例如:订票、银行、保险公司以及证券交易系统等。 二、事务属性事务4大属性:1 原子性(Atomicity):事务是一个完整的操作。2 一致性(Consistency):当事务完成时,数据必须处于一致状态。3 隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的。4 持久性(Durability):事务完成后,它对于系统的影响是永久性的。 三、创建事务T-SQL中管理事务的语句:1 开始事务: begin transaction2 提交事务:commit tran
-
redis-事务redis事务Redis 通过 MULTI 、 DISCARD 、 EXEC 和 WATCH 四个命令来实现事务功能, 本章首先讨论使用 MULTI 、 DISCARD 和 EXEC 三个命令实现的一般事务, 然后再来讨论带有 WATCH 的事务的实现。因为事务的安全性也非常重要, 所以本章最后通过常见的 ACID 性质对 Redis 事务的安全性进行了说明。事务事务提供了一种“将多个命令打包, 然后一次性、按顺序地执行”的机制, 并且事务在执行的期间不会主动中断 —— 服务器在执行完事务中的所有命令之后, 才会继续处理其他客户端的其他命令。以下是一个事务的例子, 它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令:redis> MULTI OK redis> SET book-name "Mastering C++ in 21 days"QUEUED redis> GET book-name QUEUED r
-
MySQL事务MySQL事务以及事务隔离级别MySQL事务主要用于处理操作量大,复杂度高的数据。比如在人员管理系统中,你删除一个人员,你就要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等,这些数据库操作语句就构成了一个事务MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行事务用来管理insert,update,delete语句一般来说,事务必须满足4个条件:原子性,一致性,隔离性,持久性原子性:一个事务中所有操作,要么全部执行,要么全部不执行不会结束在中间某个环节。事务在执行过程中发生错误会被回滚到事务开始前的状态一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,包含资料的精确度,串联性以及后续数据库可以自发性的完成预定的工作隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致
jpaspring事务相关课程
jpaspring事务相关教程
- 2. 事务 什么是事务?一讲到事务,就有一个典型的案例:转账。转账业务涉及到 2 个账号的变更。例如 A 现在要把自己账户上仅有的 100 元大钞转给自己的好朋友 B。转账过程中至少要涉及到两条更新语句:A 账面上的钱减少,使用更新语句实现:Update 账号表 set 我的钱=我的钱-100 where 账号拥有人=AB 账户上的钱增多,使用更新语句实现:Update 账号表 set 我的钱=我的钱+100 where 账号拥有人=B如果、万一这两条更新语句中有一条没有执行成功,会发生什么情况了?发生在 A 身上的更新语句没有成功,B 的更新语句成功了。也就是说 A 账面上的钱没有减少,B 账面上的钱却增加了。天呀!这是何等好事,关键是这钱是从哪里来的,左想右想,看来只能是银行里来的,但是,你觉得银行会做这种傻事吗?不会!那银行又是如何保证不让这种事情发生了。发生在 B 身上的更新语句没有成功,A 的更新语句成功了。也就是说 A 的钱减少了,但是 B 没有增加。傻眼了吧,莫名其妙的钱就不见了。钱去哪儿了?你会让这种事情发生吗?也不会,你会投诉银行的。当然,如果这 2 条 SQL 语句执行成功或者失败,则不会发生任何损失,可见,咱们必须控制这两条 SQL 语句要么都成功,要么都失败。对!这就是事务。所谓事务,就是把一个业务逻辑当成一个逻辑整体单元,其中的执行代码要么一起成功,但凡执行过程中出现了某些错误,就恢复到最原始的状态。转账就是一个业务逻辑,整个业务逻辑中至少包括 2 条 SQL 语句,这 2 条 SQL 语句互为依靠,彼此脱单对业务逻辑没有任何意义。所以,必须当成一个整体看待。一个事务单元有 4 个特性,也就是事务的 ACID 特性:原子性(atomicity): 表示一个事务内的所有操作是一个整体,要么全部成功,要么全部失败;一致性(consistency): 表示一个事务内有一个操作失败时,所有的更改过的数据都必须回滚到修改前的状态;如前面转账案例,转账前 A 和 B 加起来有多少钱,无论转账是否成功,最后 A 和 B 加起来的钱应该和前面相等;隔离性(isolation): 事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据;持久性(durability): 事务完成之后,它对于系统的影响是永久性的。事务结束后,就没有什么后悔药了。4 个特性中除了隔离性都比较好理解。所以,剩下的篇幅中,咱们好好聊一聊隔离性。要讲透隔离性,肯定就离不开并发概念。什么是并发?并发是计算机中的一个概念,但是在现实生活中还是能找到一个能类比的例子。火车上,2个人同时去一间洗手间,这个过程可以称其为并发。换成计算机概念就是说两段逻辑代码同时使用同一个资源。当然,这里只是从宏观上理解并发。老公和老婆共用一个账号,大家需要钱时都从这个账号上取,可假设老公和老婆就是两个事务,这 2 个事务如果同时取钱时,就必须隔离,否则就会出现麻烦。2 个事务同时进入这个账号,一查看,很高兴,账面上有钱,于是都想取出这 1000 块钱。银行肯定只能让一个事务成功,要不然银行就亏大了。这便是事务的隔离机制,当一个事务对一个资源进行操作时,必须隔离另一个事务对其进行相关操作。但是,如果隔离的太严格了,事务之间就如同排队,需要一个一个来,将会降低系统的响应时间,使用者会认为,切!这系统设计的够糟糕的,睡了一觉,还没有响应。如果隔离的太宽松了,受事务之间的影响,会发生数据的异常。所以在 JDBC 中一般会提供多种隔离机制,让开发者根据需要进行选择。事务隔离级别从低到高:读取未提交(Read Uncommitted);读取已提交 (Read Committed);可重复读(Repeatable Read);序列化(serializable)。如何选择,当然是需要根据业务需要进行设定。不同的隔离机制下,并发的事务之间会发生一些什么样的事情?
- 2. 事务日志 使用事务日志可以提高事务的安全性和效率:修改表数据时,只需要在内存中进行修改,再持久化到磁盘上的事务日志,而不用每次都将修改的数据持久化到磁盘。事务日志持久化后,内存中所修改的数据可以慢慢再刷到磁盘,这种方式称为预写式日志,修改数据需要写两次磁盘;效率快很多,因为事务日志采用追加方式,写日志的操作只是磁盘上一小块区域的顺序IO,不像随机IO需要在磁盘多个地方移动磁头;万一数据库发生崩溃,可以通过已经持久化的事务日志,来自动恢复数据。
- 4.2 例2 回滚事务 事务提交和事务回滚是一对互斥操作,事务回滚后,事务之前的操作都将失效。请书写 SQL 语句,通过一个事务向imooc_user表插入一个用户,用户名为dell,年龄为21,并回滚事务。分析:先显示通过 BEGIN 开始一个事务,然后使用 INSERT 语句插入用户,再通过 ROLLBACK 回滚事务即可。语句:整理可得语句如下:BEGIN;INSERT INTO imooc_user(id,username,age) VALUES (7,'dell',21);ROLLBACK;执行成功后,dell 并未被插入到 imooc_user 表中,可见 ROLLBACK 的确撤销了之前的数据操作。
- 5. 分布式事务 采用多数据源之后,事务的实现方式也随之发生变化。当某个数据源操作出现异常时,该数据源和其他数据源的事务都需要回滚。这种涉及多个数据源的事务,称为分布式事务,接来下我们就来具体实现一下。
- 2.1 事务 ACID 特性 面试官提问: MySQL 中事务的特性是什么?题目解析:ACID 是衡量事务的 4 个维度,分别的定义是:(1)原子性(Atomic,简写 A):原子性要求事务是一个不可分割的执行单位,如果一个事务包含多条 SQL 语句,要么所有的 SQL 都执行成功,要么所有的 SQL 都执行失败,不存在两者之间的中间状态。如果事务中的任意一条 SQL 执行失败,那么已执行成功的也需要回滚。MySQL 中 InnoDB 引擎利用 undo log 实现原子性,undo log 记录了所有已执行的 SQL 记录,如果事务执行失败调用了 rollback 语句,那么使用 undo log 的记录回滚已执行的 SQL。(2)持久性(Durability,简写 D):持久性要求事务一旦提交(commit),对数据库的改变就应该是永久的,其他的操作不会对已提交的事务有影响。InnoDB 引擎中使用 redo log 实现持久性,如果 MySQl 服务器宕机,那么在重启时可以读取 redo log 中的记录恢复数据库。(3)隔离性(Isolation,简写 I):要求一个事务的执行不受到其他并发执行事务的影响。(4)一致性(Consistency,简写 C):事务将数据库从一种状态转换到另一种状态,但是两种状态从数据上是一致的。例如用户下单扣库存让库存减少了一个单位,那么在订单中就会增加一个单位的商品,库存和订单中的商品数量和是不会改变的。
- 2.2 事务隔离级别 面试官提问:ACID 特性中的隔离性在 MySQL 中的具体定义是什么?题目解析:MySQL 提供了 4 种事务隔离级别,分别是:(1)读未提交(Read Uncommitted):所有事务可以看到其他事务未提交的执行结果;(2)读已提交(Read Committed):所有事务只能看到其他事务已提交的执行结果;(3)可重复读(Repeatable Read):MySQL 默认的隔离级别,所有事务能看到其他事务已提交后的修改后数据,但是如果第一次读取到这个修改后的数据,如果其他事务继续修改了数据并且提交,这个事务读到的也是第一次读到的值,不会读到修改后的新值。(4)串行化(Serializable):最高隔离级别,可以理解为让所有并发执行的事务都进入队列,挨个串行执行,永远不可能发生冲突。我们关注事务,关注点在于不同事务的并发冲突,而且重点在于读写操作。对于同一条数据,在执行并发事务时可能会产生读写上的问题,有三种:(1)脏读(Dirty Read):如果事务 A 更新了一份数据,比如将记录 a 更新为记录 b,那么在事务 B 中读取到的记录是 b,此时事务 A 进行了回滚操作,记录 b 回滚为记录 a,那么事务 B 读到的记录 b 则是非法数据。(2)不可重复读(Non-Repeatable Read):如果事务 A 更新了一份数据,比如将记录 a 更新为记录 b,那么在事务 B 中读取到的记录是 b,此时事务 A 继续将记录 b 更新为记录 c,那么事务 B 第二次读到的记录是 c,两次读取的结果不同。(3)幻读(Phantom Read):如果事务 B 查询到了几行数据,此时事务 A 又插入了几行新数据,那么事务 B 会读到多出来的几行数据,读到了上次读取没出现的数据。4 种隔离级别对应的问题应对能力如下表:隔离级别脏读不可重复读幻读读未提交✓✓✓读已提交✕✓✓可重复读✕✕✓串行化✕✕✕从解决问题的能力上看,串行化能解决所有的并发读写问题,但是串行执行效率太低,比如在电商网站的秒杀商品下单流程,就会导致所有的用户需要等某一个用户执行完下单操作后才能继续抢购,不具有实战意义。MySQL 默认的隔离级别是可重复读,这个级别能解决脏读和不可重复读的问题,效率上相对比较快。读未提交的执行效率最高,但是数据的一致性保障最差, 一般不会在实战中使用。在 MySQL 客户端执行 show variables like 'transaction_isolation'; 语句可查看隔离级别:MySQL 默认隔离级别
jpaspring事务相关搜索
-
j2ee
j2ee是什么
jar格式
java
java api
java applet
java c
java jdk
java list
java map
java script
java se
java socket
java swing
java switch
java web
java xml
java 程序设计
java 多线程
java 环境变量