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标签配置拦截器实现事务 一. ...
随机推荐
- Centos7.6上利用docker搭建Jenkins来自动化部署Django项目
一般情况下,将一个项目部署到生产环境的流程如下: 需求分析-原型设计-开发代码-内网部署-提交测试-确认上线-备份数据-外网更新-最终测试,如果发现外网部署的代码有异常,需要及时回滚. 整个过程相当复 ...
- 01 . GitLab简介及环境部署
GitLab简介 最初,该产品名为GitLab,是完全免费的开源软件,按照MIT许可证分发. 2013年7月,产品被拆分为:GitLabCE(社区版)和GitLabEE(企业版),当时,GitLabC ...
- Azure Terraform(二)语法详解
一,引言 上篇文章开始,我们简单介绍了以下通过基础设施管理工具----- Terraform,通过它来统一管理复杂的云基础设施资源.作为入门演示,使用Terraform 部署Azure 资源组的方式直 ...
- 【mybatis-plus】分页、逻辑删除
通过mybatis-plus实现分页,也是很简单,插件大法. 一.分页 1.配置分页插件 把分页的插件也配置到统一的配置类里: @Configuration // 配置扫描mapper的路径 @Map ...
- springMVC生成pdf文件
pom.xml文件配置=== <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf --> <dependenc ...
- [LeetCode]144. Binary Tree Preorder Traversal二叉树前序遍历
关于二叉树的遍历请看: http://www.cnblogs.com/stAr-1/p/7058262.html /* 考察基本功的一道题,迭代实现二叉树前序遍历 */ public List< ...
- 今天写了一个SSM小项目,运行之后,前端页面的CSS、js样式显示不出来,具体操作如下:
因为SSM中我们设置了拦截器,拦截器会拦截CSS和JS,所有样式渲染不出来,在Web.xml中写上 1 <servlet-mapping> 2 <servlet-name>de ...
- C语言基础二维数组
(1)二位数组的定义int array[n][m],行下标的取值范围是0~n-1,列下标的取值范围是0~m-1,二维数组最大下标元素是array[n-1][m-1]:如定义一个3行4列的数组 int ...
- Hive日期函数总结(转学习使用)
一.时间戳函数 1.获取当前时区的UNIX时间戳:select unix_timestamp(); 2.将指定时间转为UNIX时间戳: select unix_timestamp('2012-03-0 ...
- spark进行相同列的join时,只留下A与B关系,不要B与A
一.问题需求: 近期需要做一个商品集合的相关性计算,需要将所有商品进行两两组合笛卡尔积,但spark自带的笛卡尔积会造成过多重复,而且增加join量 假如商品集合里面有: aa aa bb b ...