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. ⑦SpringCloud 实战:引入Sleuth组件,完善服务链路跟踪

    这是SpringCloud实战系列中第7篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...

  2. day021|python之面向对象进阶1

    面向对象进阶 目录 面向对象进阶 1 继承 1.1 继承入门 1.1.1 继承基础 1.1.2 类的基本使用 1.2 多继承 1.2.1 多继承的基本使用 1.2.2 多继承以后的重复性 1.3 类的 ...

  3. java 多线程40个问题汇总(转)

    java 多线程40个问题汇总,自己也记录一份,如有侵权,联系删除 ref from :http://www.cnblogs.com/xrq730/p/5060921.html 1.多线程作用 - 利 ...

  4. 最全的Visual Studio Code配置及使用教程

    史上最全vscode配置使用教程 工欲善其事,必先利其器.想要优雅且高效的编写代码,必须熟练使用一款前端开发工具.但前端开发工具数不胜数,像HBuilder.Sublime Text.WebStorm ...

  5. 发送微信通知 java 实现

    /实现类 @Service public class WeChatServiceImpl implements IWeChatService { @Override public WeChatSend ...

  6. C语言输入字符串

    首先强调一点,C语言没有字符串的概念!所谓的字符串实际上还是以数组形式保存的. 方法1  -- 通过"%s"输入 优点:简单明了,输入字符只要不大于数组长度都可以. #includ ...

  7. 所有CSS字体属性

    font(在一个声明中设置所有的字体属性) font-family(指定文本的字体系列) font-size(指定文本的字体大小) font-style(指定文本的字体样式) font-variant ...

  8. JTable写入数据库内容

    /*JTable中导入数据库数据. 创建2个Vector col和dat col存入字段名 dat存入数据内容. dbname=new JTable(dat,col); */package demo; ...

  9. 多线程应用之调用start()方法和run()方法的区别

    今天在做项目的时候,遇到一个问题,两个一模一样的demo,运行出来的效果却一点也不一样,找了半天,就是有一行代码不同,一个是thread.start();一个是thread.run();和我预计的一样 ...

  10. 【原创】Linux PCI驱动框架分析(三)

    背 景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本 ...