Spring-01-事务
Spring事务机制
spring事务机制最重要的两个配置项,隔离级别和传播特性。
1. 隔离级别
隔离级别针对高并发问题导致的数据库丢失更新问题
1.1 数据库的4大基本特征
- 原子性(Atomic):事务中的操作被看做是一个整体的业务单元,这个业务单元的操作要么全部成功,要么全部失败,不会出现部分成功的情况。
- 一致性(Consistency):事物完成后,所有数据的状态保持一致
- 隔离性(Isolation):为了防止数据库丢失更新的问题,数据库定义了隔离级别的概念
- 持久性(Duration):事务结束后,所有的数据会持久化到磁盘等持久化存储设备中,断电可访问
1.2 隔离级别具体
数据库标准提出了4类隔离级别:读未提交,读写提交,可重复读,串行化。
读未提交(read uncommitted):允许一个事务读取另一个事务未提交的数据,缺点是会出现脏读
- 读写提交(read committed):一个事务只能读取另一个事务已经提交的数据,缺点是会出现不可重复度
- 可重复读(repeatable read): 数据库阻塞读取已经被另外一个事务读取的信息,缺点是会出现幻读
- 串行化(serializable):所有的sql都会按照顺序执行
1.3 传播行为
在spring中一个方法调用另一个方法时,可以让事务采取不同的策略工作,如新建事务或者挂起当前事务,这就是事务的传播行为。
在
在 org.springframework.transaction.annotation中存在7种传播行为
REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED)默认
如果当前方法存在事务就沿用当前事务,否则新建一个事务运行子方法
SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS)
如果当前方法存在事务就沿用当前事务,否则采用无事务的方式运行子方法
MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY)
必须使用事务,如果当前没有事务就会抛出异常,如果存在事务就会沿用当前事务
REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW)
无论当前方法是否存在事务都会创建新的事务执行
这样事务就可以有新的锁和隔离级别等特性,与当前事务相对独立
NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED)
不支持事务,如果当前方法存在事务,将挂起事务,运行方法
NEVER(TransactionDefinition.PROPAGATION_NEVER)
不支持事务,如果当前方法存在事务,则抛出异常,否则继续使用无事务机制执行
NESTED(TransactionDefinition.PROPAGATION_NESTED)
当前方法执行子方法,如果子方法发生异常,只回滚子方法执行过的SQL而不回滚当前方法的事务,这是通过在当前事务设置保存点(save point)来实现的。只回滚到当前保存点的数据状态,不会让保存点之前的代码也回滚
其中,黄色标识的为常用传播行为。
Spring-01-事务的更多相关文章
- 04 Spring:01.Spring框架简介&&02.程序间耦合&&03.Spring的 IOC 和 DI&&08.面向切面编程 AOP&&10.Spring中事务控制
spring共四天 第一天:spring框架的概述以及spring中基于XML的IOC配置 第二天:spring中基于注解的IOC和ioc的案例 第三天:spring中的aop和基于XML以及注解的A ...
- spring的事务控制
1.事务介绍 (1)特性:ACID Atomicity(原子性):事务中的所有操作要么全做要么全不做 Consistency(一致性):事务执行的结果使得数据库从一个一致性状态转移到另一个一致性状态 ...
- 【转】Spring中事务与aop的先后顺序问题
[原文链接] http://my.oschina.net/HuifengWang/blog/304188 [正文] Spring中的事务是通过aop来实现的,当我们自己写aop拦截的时候,会遇到跟sp ...
- Spring AOP事务管理(使用切面把事务管理起来)
在<Spring Transaction 分析事务属性(事务的基本概念.配置)>基础上 http://blog.csdn.net/partner4java/article/details/ ...
- Spring的事务管理
事务 事务:是逻辑上一组操作,要么全都成功,要么全都失败. 事务特性(ACID) 原子性:事务不可分割 一致性:事务执行的前后,数据完整性保持一致 隔离性:一个事务执行的时候,不应该受到其他事务的打扰 ...
- spring笔记--事务管理之声明式事务
事务简介: 事务管理是企业级应用开发中必不可少的技术,主要用来确保数据的完整性和一致性, 事务:就是一系列动作,它们被当作一个独立的工作单元,这些动作要么全部完成,要么全部不起作用. Spring中使 ...
- (spring-第20回【AOP基础篇】)Spring与事务
要想了解Spring的事务,首先要了解数据库事务的基本知识,数据库并发会产生很多问题,Spring使用ThreadLocal技术来处理这些问题,那么我们必须了解Java的ThreadLocal技术.下 ...
- 软件测试之loadrunner学习笔记-01事务
loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...
- spring的事务操作
我们项目一期已经差不多结束了,所以一些细节也被拿了出来,出现最多的就是事务的操作了.因为自己负责的是一个模块(因为是另外一个项目的负责人),所以组员经常会遇到事务的问题,会出现很多奇葩的用法,各种乱用 ...
- Spring MVC 事务配置
Spring MVC事务配置 要了解事务配置的所有方法,请看一下<Spring事务配置的5种方法> 本文介绍两种配置方法: 一. XML,使用tx标签配置拦截器实现事务 一. ...
随机推荐
- Dapper 返回Sql server 自增长ID 标识列SCOPE_IDENTITY
原理 使用SELECT SCOPE_IDENTITY(),取获取刚刚插入记录自增的主键 示例 entity.Create(); StringBuilder strSql = new StringBui ...
- 关于线程池(ThreadPoolExecutor)参数的浅析
引子 线程池在项目中很常用,需要多个任务异步执行的地方我们都会去创建一个线程池. 我们看到 ThreadPoolExecutor源码中提供了更方便的工厂方法(Executors)使用. 提供方便应该是 ...
- JAVA多线程下高并发的处理经验
java中的线程:java中,每个线程都有一个调用栈存放在线程栈之中,一个java应用总是从main()函数开始运行,被称为主线程.一旦创建一个新的线程,就会产生一个线程栈.线程总体分为:用户线程和守 ...
- C#自定义TemplateImage使用模板底图,运行时根据用户或产品信息生成海报图(1)
由于经常需要基于固定的一个模板底图,生成微信小程序分享用的海报图,如果每次都调用绘图函数,手动编写每个placeholder的填充,重复而且容易出错,因此,封装一个TemplateImage,用于填充 ...
- java 反射随记
记录一下有关 Class 对象的相关方法: 1.获取 Class 对象的三个方法: ⑴ 使用 Class.forName("全限定类名") ,参数是该类的全限定类名,可拓展性强: ...
- 仅4步,就可通过SQL进行分布式死锁的检测与消除
摘要:本文主要介绍在 GaussDB(DWS) 中,如何通过 SQL 语句,对分布式死锁进行检测和恢复. 分布式数仓应用场景中,我们经常遇到数据库系统 hang 住的问题,所谓 hang 是指虽然数据 ...
- C#—连接SQLserver数据库,并执行查询语句代码
//字段ArticleID,ArticleName,ArticleNumber,Unit,Weight,Price,Currency,IsIuggage,IsQuarantine string str ...
- JAVA NIO Selector Channel
These four events are represented by the four SelectionKey constants: SelectionKey.OP_CONNECT Select ...
- LVS之1---工作原理
LVS之1---工作原理 LVS 介绍 LVS:Linux Virtual Server,Linux虚拟服务器,负载调度器,是一个由章文嵩(花名 正明)博士从1998年开始发起的自由软件项目. 软件作 ...
- VScode中配置C++运行环境
目录 VScode中配置C++运行环境 1. 哪些插件 2. 配置开始 3. 编写代码并运行 VScode中配置C++运行环境 关于安装mingw的教程,网络上已经有很多了,这里不再赘述,下面就看VS ...