回滚

Java事务不回滚的原因总结

匿名 (未验证) 提交于 2019-12-02 21:53:52
1、首先要检查数据的引擎,InnoDB支持事务,MyIsam不支持事务 3、如果不使用try catch的话,如果想其它异常也可以回滚,可以加上 rollbackFor =Exception.class @Transactional(readOnly = false,propagation = Propagation.REQUIRED, rollbackFor =Exception.class ) 原文:https://www.cnblogs.com/xwgcxk/p/9218137.html

java中的事务(一)

匿名 (未验证) 提交于 2019-12-02 21:53:52
参考转载: https://blog.csdn.net/yehuang_0801/article/details/75246413 事务定义深究: https://blog.csdn.net/amghost/article/details/17651891 事务:数据库应用中完成单一逻辑功能的操作集合,是一个既具有原子性又具有一致性的功能,我们要求事务不违反任何数据库的一致性约束,也就是说,如果事务启动时数据是一致的,那么当这个事务成功结束的时候数据库也应该是一致的 事务有四大特征 1.原子( 原子性: 事务的所有操作在数据库中要么全部正确反映,要么全部不反映。 ) try{ }catch(AnyException){ } 2.一致 一致就涉及到事务了,定义为事务结束后,所有的人拿到的数据、索引都应该是一致的。 个人理解:就是原子操作完之后,所有的人拿到的数据、索引都应该是一致的。 3.隔离 保证不同的事务相互独立、透明地执行。 级联废弃:如果事务T1读到了事务T2未提交(没有commit,虽然操作数据库成功)的数据,如果T2提 交失败,那么T1也要回滚。 隔离级别: Read Uncommitted(读未提交) Read Committed(读已提交) Repeatable Read(可重复读)(MySQL默认隔离级别) Serializable(串行化) 脏读、不可重复读、幻读

Java Spring 事务回滚详解

匿名 (未验证) 提交于 2019-12-02 21:52:03
这篇文章主要介绍 java Spring事务回滚 spring 事务回滚 1、遇到的问题   当我们一个方法里面有多个数据库保存操作的时候,中间的数据库操作发生的错误。伪代码如下: public method() { Dao1.save(Person1); Dao1.save(Person2); Dao1.save(Person2);//假如这句发生了错误,前面的两个对象会被保存到数据库中 Dao1.save(Person2); }   期待的情况:发生错误之前的 所有数据库保存操作都回滚 ,即不保存   正常情况:前面的数据库操作会被执行,而发生数据库操作错误开始及之后的所有的数据保存操作都将失败。这样子应该都不是我们要的结果吧。   当遇到这种情况,我们就可以使用 Spring的事务解决这个问题。 2、异常的一些基本知识 1) 异常的架构   异常的继承结构: Throwable为基类,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception。Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。 2)Error异常    Error表示程序在运行期间出现了十分严重、不可恢复的错误,在这种情况下应用程序只能中止运行

什么是分布式事务以及有哪些解决方案?

匿名 (未验证) 提交于 2019-12-02 21:52:03
答:指一次大的操作由不同的小操作组成的,这些小的操作分布在不同的服务器上,分布式事务需要保证这些小操作要么全部成功,要么全部失败。从本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 总结:其实上面两种场景,归根到底是要操作多数据库,并且要保证数据的一致性,而产生的分布式事务的。 XA实现分布式事务的原理如下: 1、 同步阻塞问题 :执行过程中,所有参与节点都是事务阻塞型的。当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态。 2、 单点故障 :由于(事务管理器)协调者的重要性,一旦协调者发生故障。(本地资源管理器)参与者会一直阻塞下去。尤其在第二阶段,协调者发生故障,那么所有的参与者还都处于锁定事务资源的状态中,而无法继续完成事务操作。(如果是协调者挂掉,可以重新选举一个协调者,但是无法解决因为协调者宕机导致的参与者处于阻塞状态的问题) 3、 数据不一致 :在二阶段提交的阶段二中,当协调者向参与者发送commit请求之后,发生了局部网络异常或者在发送commit请求过程中协调者发生了故障,这会导致只有一部分参与者接收到了commit请求。而在这部分参与者接到commit请求之后就会执行commit操作。但是其他部分未接到commit请求的机器无法执行事务提交。于是整个分布式系统便出现了数据不一致的现象。 4、 二阶段无法解决的问题

什么是事务?事务的基本操作、事务的隔离性问题、事务的ACID特性

断了今生、忘了曾经 提交于 2019-12-02 18:37:52
文章目录 1.什么是事务? 2.事务的基本操作 2.事务操作的注意事项 3.事务的隔离级别 3.1 无隔离性的问题 3.1.1 脏读 3.1.2 不可重复读 3.1.3 幻读 3.2 事务的隔离级别 3.2.1 设置事务的隔离级别 3.2.2 查看当前的隔离级别 4.事务的特性 4.1 原子性 4.2 一致性 4.3 隔离性 4.4 持久性 1.什么是事务?   事务是数据库中一个单独的执行单行(Unit),事务就是由一种数据操纵语言DML语句组成,这一组DML要么全不成功要么全部失败,是一个整体。   以网上购物为例,其交易过程包括以下几步: 更新客户所购商品的库存信息 保存客户付款信息 生成订单并且保存到数据库中 更新用户相关信息,例如购物数量等   在正常情况下,这些操作都将顺利执行,最终交易成功,与交易相关的所有数据库信息也成功地更新。但是,如果遇到断电或者是其他意外情况,导致这一系列过程中任何一个环节出了差错(例如在更新商品库存信息时发生异常、顾客银行账户余额不足等),都将导致整个交易过程失败。而一旦交易失败,数据库中所有信息都必须保持交易前的状态不变,例如最后一步更新用户信息时失败而导致交易失败,那么必须保证这笔失败的交易不影响数据库的状态,即原有的库存信息没有被更新,用户也没有付款,订单也没有生成。否则数据库的信息将会不一致,或者出现更为严重的不可预测的后果。

spring配置事务管理及事物传播行为介绍(@Transactional(propagation = Propagation.SUPPORTS))

落花浮王杯 提交于 2019-12-02 16:39:58
转载 Spring配置事务管理,service端通过@Transactional注解 使用步骤: 步骤一、在spring配置文件中引入<tx:>命名空间 <beans xmlns=”http://www.springframework.org/schema/beans” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:tx=”http://www.springframework.org/schema/tx” xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd”> 步骤二、具有@Transactional 注解的bean自动配置为声明式事务支持 <tx:annotation-driven transaction-manager=”transactionManager” proxy-target-class=

Spring事务_注解_特性

喜夏-厌秋 提交于 2019-12-02 15:44:47
Spring 是一个 IOC 和 AOP 容器框架。 ## 控制反转(IOC) ## 传统的 java 开发模式中,当需要一个对象时,我们会自己使用 new 或者 getInstance 等直接或者间接调用构造方法创建一个对象。而在 spring 开发模式中,spring 容器使用了工厂模式为我们创建了所需要的对象,不需要我们自己创建了,直接调用 spring 提供的对象就可以了,这是控制反转的思想。 ## 依赖注入(DI) ## spring 使用 javaBean 对象的 set 方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的值的过程,就是依赖注入的思想。 ## 面向切面编程(AOP) ## 在面向切面编程中,我们将一个个的对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制、事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。AOP 底层是动态代理,如果是接口采用 JDK 动态代理,如果是类采用CGLIB 方式实现动态代理。 **动态代理** AOP实现的关键在于 代理模式,AOP代理主要分为静态代理和动态代理。静态代理的代表为AspectJ;动态代理则以Spring AOP为代表。 (1)AspectJ是静态代理的增强,所谓静态代理,就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强,他会在编译阶段将AspectJ

MySQL数据库-简单概念和数据库操作

非 Y 不嫁゛ 提交于 2019-12-02 11:45:22
数据库 什么是数据库:存储数据的仓库,按照一定的数据结构来组织,管理存储数据,还提供了增删改查的功能。 事务 什么是事务: 将一组有序的增删改操作,当做一个独立的执行单元,如果操作都成功,那么事务就执行成功,如果有一个操作执行失败,真个事务都失败,事务将会执行回滚,恢复到事务开始之前的状态。 事物的四大特性 原子性:将事务看做最小的执行单元,不可分割,要么都成功,要么都失败。 一致性:事务在执行前和执行后的状态都保持一致。 隔离性:当多用户并发访问数据库时,数据库会给每个用户开启一个事务,每个事务之间相互隔离,互补影响。 持久性:事务一旦执行成功,数据的变化将会永久性的作用于真个数据库,就算数据库出现故障也不会影响数据。 在不考虑隔离性的情况下会出现的问题 脏读:当一个未提交的事务,使用了另一个未提交事务的数据 不可重复度:A事务重复读取一条数据,在这期间B事务修改了这条数据,导致A事务两次读取的数据不一样 幻读:A事务读取一张表所有数据,并做了统计计算,B事务修改了这张表的某一条数据,导致A事务的结构和实际情况出现偏差,类似出现幻觉。 四种隔离级别 read uncommit 读未提交:最低的隔离级别,会出现以上三个问题的任意一种情况 read commit 读已提交:可以避免脏读 repeatable read 可重复读:可以避免脏读和不可重复读 serializable

MySQL主键与唯一索引约束

懵懂的女人 提交于 2019-12-02 11:30:20
MySQL主键与唯一索引约束 触发约束检测的时机: insert update 当检测到违反约束时,不同存储引擎的处理动作是不一样的。 如果存储引擎支持事务,SQL会自动回滚。 例子: create table t1 ( id int ( 10 ) primary key ) engine = innodb ; insert into t1 values ( 1 ) ; insert into t1 values ( 1 ) ; 其中第二条insert会因为违反约束,而导致回滚。 通常可以使用: show warnings ; 来查看违反约束后的错误提示。 如果存储引擎不支持事务,SQL的执行会中断,此时可能会导致后续有符合条件的行不被操作,出现不符合预期的结果。 例子: create table t2 ( id int ( 10 ) unique ) engine = MyISAM ; insert into t2 values ( 1 ) ; insert into t2 values ( 5 ) ; insert into t2 values ( 6 ) ; insert into t2 values ( 10 ) ; update t2 set id = id + 1 ; update执行后,猜猜会得到什么结果集? 猜想一:2, 6, 7, 11 猜想二:1, 5, 6,

Liquibase使用(转)

二次信任 提交于 2019-12-02 10:46:00
文章目录 介绍 快速使用 Springboot中 引入依赖 配置日志文件ChangeLog 编写变更记录ChangeSet Maven中 引入依赖 配置liquibase.properties 编写变更记录ChangeSet 版本回滚 回滚指定次数 回滚到指定tag 输出回滚语句 输出变更记录 一些规范 参考资料 介绍 Liquibase是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态。它的目标是提供一种数据库类型无关的解决方案,通过执行schema类型的文件来达到迁移。其有点主要有以下: 支持几乎所有主流的数据库,如MySQL, PostgreSQL, Oracle, Sql Server, DB2等; 支持多开发者的协作维护; 日志文件支持多种格式,如XML, YAML, JSON, SQL等; 支持多种运行方式,如命令行、Spring集成、Maven插件、Gradle插件等。 快速使用 Springboot中 引入依赖 <dependencies> <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> </dependency> <dependency> <