1、回顾事务

l 事务:一组业务操作ABCD,要么全部成功,要么全部不成功。

l 特性:ACID

原子性:整体

一致性:完成

隔离性:并发

持久性:结果

l 隔离问题:

脏读:一个事务读到另一个事务没有提交的数据

不可重复读:一个事务读到另一个事务已提交的数据(update)

虚读(幻读):一个事务读到另一个事务已提交的数据(insert)

l 隔离级别:

read uncommitted:读未提交。存在3个问题

read committed:读已提交。解决脏读,存在2个问题

repeatable read:可重复读。解决:脏读、不可重复读,存在1个问题。

serializable :串行化。都解决,单事务。

l mysql 事务操作--简单

ABCD 一个事务

Connection conn = null;

try{

//1 获得连接

conn = ...;

//2 开启事务

conn.setAutoCommit(false);

A

B

C

D

//3 提交事务

conn.commit();

} catche(){

//4 回滚事务

conn.rollback();

}

l mysql 事务操作--Savepoint

需求:AB(必须),CD(可选)

Connection conn = null;

Savepoint savepoint = null;  //保存点,记录操作的当前位置,之后可以回滚到指定的位置。(可以回滚一部分)

try{

//1 获得连接

conn = ...;

//2 开启事务

conn.setAutoCommit(false);

A

B

savepoint = conn.setSavepoint();

C

D

//3 提交事务

conn.commit();

} catche(){

if(savepoint != null){   //CD异常

// 回滚到CD之前

conn.rollback(savepoint);

// 提交AB

conn.commit();

} else{   //AB异常

// 回滚AB

conn.rollback();

}

}

2、 事务管理介绍

2.1 导入jar包

transaction  -->  tx

2.2 三个顶级接口

l PlatformTransactionManager  平台事务管理器,spring要管理事务,必须使用事务管理器

进行事务配置时,必须配置事务管理器

l TransactionDefinition:事务详情(事务定义、事务属性),spring用于确定事务具体详情,

例如:隔离级别、是否只读、超时时间等

进行事务配置时,必须配置详情。spring将配置项封装到该对象实例。

l TransactionStatus:事务状态,spring用于记录当前事务运行状态。例如:是否有保存点,事务是否完成。

spring底层根据状态进行相应操作。

2.3 PlatformTransactionManager  事务管理器

l 导入jar包:需要时平台事务管理器的实现类

l 常见的事务管理器

DataSourceTransactionManager  ,jdbc开发时事务管理器,采用JdbcTemplate

HibernateTransactionManager,hibernate开发时事务管理器,整合hibernate

l api详解

TransactionStatus getTransaction(TransactionDefinition definition) ,事务管理器 通过“事务详情”,获得“事务状态”,从而管理事务。

void commit(TransactionStatus status)  根据状态提交

void rollback(TransactionStatus status) 根据状态回滚

2.4 TransactionStatus

2.5 TransactionDefinition

l 传播行为:在两个业务之间如何共享事务。

PROPAGATION_REQUIRED , required , 必须  【默认值】

支持当前事务,A如果有事务,B将使用该事务。

如果A没有事务,B将创建一个新的事务。

PROPAGATION_SUPPORTS ,supports ,支持

支持当前事务,A如果有事务,B将使用该事务。

如果A没有事务,B将以非事务执行。

PROPAGATION_MANDATORY,mandatory ,强制

支持当前事务,A如果有事务,B将使用该事务。

如果A没有事务,B将抛异常。

PROPAGATION_REQUIRES_NEW , requires_new ,必须新的

如果A有事务,将A的事务挂起,B创建一个新的事务

如果A没有事务,B创建一个新的事务

PROPAGATION_NOT_SUPPORTED ,not_supported ,不支持

如果A有事务,将A的事务挂起,B将以非事务执行

如果A没有事务,B将以非事务执行

PROPAGATION_NEVER ,never,从不

如果A有事务,B将抛异常

如果A没有事务,B将以非事务执行

PROPAGATION_NESTED ,nested ,嵌套

A和B底层采用保存点机制,形成嵌套事务。

寒假day05-spring框架的更多相关文章

  1. Spring框架概述

    Spring是最流行的Java企业级应用开发框架,全球数以百万的开发者在使用Spring框架创建高性能.易测试.可重用的代码. Spring框架的核心特性可以应用于任何Java应用,但扩展的JavaE ...

  2. 初识Spring框架实现IOC和DI(依赖注入)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的, IoC是 ...

  3. Spring 框架的架包分析、功能作用、优点,及jar架包简介

    Spring 框架的架包详解    Spring的作用     Spring的优势  由于刚搭建完一个MVC框架,决定分享一下我搭建过程中学习到的一些东西.我觉得不管你是个初级程序员还是高级程序员抑或 ...

  4. 最新 Eclipse IDE下的Spring框架配置及简单实例

    前段时间开始着手学习Spring框架,又是买书又是看视频找教程的,可是鲜有介绍如何配置Spring+Eclipse的方法,现在将我的成功经验分享给大家. 本文的一些源代码来源于码农教程:http:// ...

  5. spring框架学习(三)

    一.Spring自动组件扫描 Spring 提供组件扫描(component scanning)功能.它能从指定的classpath里自动扫描.侦测和实例化具有特定注解的组件. 基本的注解是@Comp ...

  6. Spring框架学习(一)

    一. spring概述 Spring 框架是一个分层架构,由 7 个定义良好的模块组成.Spring 模块构建在核心容器之上,核心容器定义了创建.配置和管理 bean 的方式,如图 1 所示. 图 1 ...

  7. Spring 系列: Spring 框架简介 -7个部分

    Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...

  8. 使用 Spring Boot 快速构建 Spring 框架应用--转

    原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-spring-boot/ Spring 框架对于很多 Java 开发人员来说都不陌生.自从 2 ...

  9. 【Spring】浅析Spring框架的搭建

    c目录结构: // contents structure [-] Spring是什么 搭建Spring框架 简单Demo 1,建立User类 2,建立Test类 3,建立ApplicationCont ...

  10. Spring框架总结

    Spring(由Rod Johnson创建的一个开源框架) Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建.简单来说,Spr ...

随机推荐

  1. jar包学习

    jar: java的压缩包,主要用于存储类文件,或者配置文件等. 命令格式: jar -cf 包名.jar 包目录 解压缩: jar -xvf 包名.jar 将jar包目录列表重定向到一个文件中: j ...

  2. Java 统计整数二进制中1的个数

    package cookie; public class CountBinary_1 { public static void main(String[] args) { System.out.pri ...

  3. ajax异步提交 有时会出现无bug的数据处理异常-----debug没有问题,正常运行却数据处理不正确,极少机会会出现正常的处理结果

    ajax  被使用时,常默认的就使用了异步处理. 当遇到后面的代码对同样的数据进行处理 或 要依赖前面ajax处理的结果时,就会导致数据处理结果不正确,未达到预期值. 且,debug时却能正常完成功能 ...

  4. bool之regexp正则注入(原理详解)

    感谢原创博主的文章,在此致敬.本文转自:http://www.cnblogs.com/lcamry/articles/5717442.html 我们都已经知道,在MYSQL 5+中 informati ...

  5. Java中的String介绍

    一.概述 String是代表字符串的类,本身是一个最终类,使用final修饰,不能被继承. 二.String字符串的特征 1. 字符串在内存中是以字符数组的形式来存储的. 示例如下,可以从String ...

  6. centos 7.4 安装docker 19.03.6 版本。附带离线安装包

    说明: 1.此环境为未安装过docker服务的环境, 如果已经安装,则自行卸载. 2.以下环境中上传的包及离线yum源默认为/home目录下,如无特殊说明,以此目录为准 步骤一:下载docker离线安 ...

  7. Java算法练习——两数相加

    题目链接 题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新 ...

  8. 多源D点(邻接表+bfs)

    [问题]给出一颗n个结点的树,树上每条边的边权都是1,这n个结点中有m个特殊点,请你求出树上距离这m个特殊点距离均不超过d的点的数量,包含特殊点本身. 输入: 输入第一行包含三个正整数,n.m.d分别 ...

  9. python基础2--进制、字符编码和文件处理

    一.进制 1.二进制 定义 二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是"逢二进一"   转换方式 二进制转换为十进制: 把二进制数按权展开.相加即得十进制数. ...

  10. Java中Scanner类在nextInt()后无法输入nextLine()的问题

    首先,Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取.这个扫描器在扫描过程中判断停止的依据就是 ...