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. Redis5.0 主从模式和高可用 搭建和测试报告

    Redis 单机模式很简单,相关测试水文看这里 Redis5 压力测试结果反馈报告 必须的,今天接着写水文,写一写现在redis 支持的三种集群,主从模式,哨兵模式,Cluster模式,今天先搞主从模 ...

  2. 最全Python正则表达式来袭

    前言 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"))操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成 ...

  3. DataTable添加checkbox实现表格数据全选,单选(点选)

    Datatables是一款jquery表格插件.它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能. 分页,即时搜索和排序 几乎支持任何数据源:DOM, javascript, Ajax ...

  4. Java生产环境下性能监控与调优详解视频教程 百度云 网盘

    集数合计:9章Java视频教程详情描述:A0193<Java生产环境下性能监控与调优详解视频教程>软件开发只是第一步,上线后的性能监控与调优才是更为重要的一步本课程将为你讲解如何在生产环境 ...

  5. Semaphore信号量深度解析

    1. 使用指南 package com.multthread; import java.util.concurrent.ExecutorService; import java.util.concur ...

  6. Git设置记住账号密码

    Git设置记住账号密码 添加如下配置 [credential] helper = store

  7. Atlas 2.1.0 实践(2)—— 安装Atlas

    在完成Atlas编译以后,就可以进行Atlas的安装了.Atlas的安装主要是安装Atlas的Server端,也就Atlas的管理页面,并确保Atlas与Kafka Hbase Solr等组件的集成. ...

  8. jQuery的data()方法

    jQuery文档对.data()方法的描述: As of jQuery 1.4.3 HTML 5 data- attributes will be automatically pulled in to ...

  9. Java图片的灰度处理方法

    通过看网上各种大牛的总结,和自己亲身测试总结一下Java图片的灰度处理方法 (1)我们熟知的图片中的像素点有RGB值. (2)图片灰度化的方式大概分为四种,第一种是最大值法(取颜色RGB中的最大值作为 ...

  10. spark的运行指标监控

    sparkUi的4040界面已经有了运行监控指标,为什么我们还要自定义存入redis? 1.结合自己的业务,可以将监控页面集成到自己的数据平台内,方便问题查找,邮件告警 2.可以在sparkUi的基础 ...