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-事务的更多相关文章

  1. 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 ...

  2. spring的事务控制

    1.事务介绍 (1)特性:ACID Atomicity(原子性):事务中的所有操作要么全做要么全不做 Consistency(一致性):事务执行的结果使得数据库从一个一致性状态转移到另一个一致性状态 ...

  3. 【转】Spring中事务与aop的先后顺序问题

    [原文链接] http://my.oschina.net/HuifengWang/blog/304188 [正文] Spring中的事务是通过aop来实现的,当我们自己写aop拦截的时候,会遇到跟sp ...

  4. Spring AOP事务管理(使用切面把事务管理起来)

    在<Spring Transaction 分析事务属性(事务的基本概念.配置)>基础上 http://blog.csdn.net/partner4java/article/details/ ...

  5. Spring的事务管理

    事务 事务:是逻辑上一组操作,要么全都成功,要么全都失败. 事务特性(ACID) 原子性:事务不可分割 一致性:事务执行的前后,数据完整性保持一致 隔离性:一个事务执行的时候,不应该受到其他事务的打扰 ...

  6. spring笔记--事务管理之声明式事务

    事务简介: 事务管理是企业级应用开发中必不可少的技术,主要用来确保数据的完整性和一致性, 事务:就是一系列动作,它们被当作一个独立的工作单元,这些动作要么全部完成,要么全部不起作用. Spring中使 ...

  7. (spring-第20回【AOP基础篇】)Spring与事务

    要想了解Spring的事务,首先要了解数据库事务的基本知识,数据库并发会产生很多问题,Spring使用ThreadLocal技术来处理这些问题,那么我们必须了解Java的ThreadLocal技术.下 ...

  8. 软件测试之loadrunner学习笔记-01事务

    loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...

  9. spring的事务操作

    我们项目一期已经差不多结束了,所以一些细节也被拿了出来,出现最多的就是事务的操作了.因为自己负责的是一个模块(因为是另外一个项目的负责人),所以组员经常会遇到事务的问题,会出现很多奇葩的用法,各种乱用 ...

  10. Spring MVC 事务配置

    Spring MVC事务配置 要了解事务配置的所有方法,请看一下<Spring事务配置的5种方法> 本文介绍两种配置方法: 一.      XML,使用tx标签配置拦截器实现事务 一.   ...

随机推荐

  1. openstack高可用集群19-linuxbridge结合vxlan

    生产环境,假设我们的openstack是公有云,我们一般的linuxbridge结合vlan的模式相对于大量的用户来说是vlan是不够用的,于是我们引进vxlan技术解决云主机内网网络通讯的问题. 我 ...

  2. 使用Attribute限制Action只接受Ajax请求

    原博文 https://www.cnblogs.com/h82258652/p/3939365.html 代码 /// <summary> /// 仅允许Ajax操作 /// </s ...

  3. 6.自定义view-侧边字母导航LetterNavigationBar

    1.效果 2.实现原理 1.绘制右侧的字母 2.onTouchEvent 中获取点击.滑动的位置,在通过invalidate() 去重新绘制, ​ 回调给activity去处理中间显示的文字 核心代码 ...

  4. (十五)、linux软件的安装与查询-rpm与yum命令

    一.RPM软件管理程序:rpm 1.RPM安装软件(install) rpm命令的选项超级多,安装话直接使用-ivh即可,其余做了解即可 命令格式:rpm  -ivh  package_name.rp ...

  5. Gitlab + Jenkins 构建,发布一个基于Go的Gin测试项目

    部署Go项目简介 对于golang的发布,之前一直没有一套规范的发布流程,来看看之前发布流程: 方案一 • 开发者本地环境需要将环境变量文件改为正式环境配置 • 编译成可执行文件 • 发送给运维 • ...

  6. springMVC框架配置定时器

    在springmvc.xml添加如下内容在xmlns中添加 xmlns:task="http://www.springframework.org/schema/task"1在xsi ...

  7. Linux嵌入式学习-交叉编译mplayer

    http://bbs.gkong.com/archive.aspx?ID=286721

  8. springboot 启动jar正确方式

    首先需要pom.xml配置一个插件: IDEA 在右侧执行顶上m图片按钮 在command Line 中执行clean package命令 执行打包注意 打完jar包后最好解压jar查看一下META- ...

  9. Linux操作系统的文件目录结构

    一 --- 导读 首先记住一句经典的话:"linux世界中,万事万物皆为文件" 二---linux的目录结构示意图和windows下的目录结构示意图(本图需要背诵) 三---各目录 ...

  10. MySQL不会丢失数据的秘密,就藏在它的 7种日志里

    本文收录在 GitHub 地址 https://github.com/chengxy-nds/Springboot-Notebook 进入正题前先简单看看MySQL的逻辑架构,相信我用的着. MySQ ...