特性

一致性:业务处理要么都成功,要么都失败,不能部分成功不分失败

原子性:业务操作是由多个动作完成,这些动作不可分割,要么都执行,要么都不执行

隔离性:事务间之间要做隔离,不要互相影响

持久性:操作结果最终都会持久化到持久化存储器中

说到底都是为了一致性,才引出原子性、隔离性和持久性,之前在知乎看到过一篇比较好的文章(https://www.zhihu.com/question/30272728/answer/72476703)

配置方式

编程式事务(xml配置)

声明式事务(注解配置,@Transactional)

注意:直接用函数的方式调用是不会触发事务的,需要使用spring的bean调用,比如在当前bean中注入自己

声明式事务

传播机制(7种)

package org.springframework.transaction.annotation;

public enum Propagation {
// 默认,有事务就加入当前事务中,没有就新建一个事务
REQUIRED(0),
// 支持事务,有事务就用事务,没有就不用事务
SUPPORTS(1),
// 支持当前事务,没有事务就会抛出异常
MANDATORY(2),
// 挂起当前事务,独立开启一个事务,与外层事务不会相互影响
REQUIRES_NEW(3),
// 以非事务方式运行,存在事务则将当前事务挂起
NOT_SUPPORTED(4),
// 以非事务方式运行,存在事务抛出异常
NEVER(5),
// 嵌套事务,没有事务就等同于REQUIRED,有事务就以嵌套事务的方式运行,事务提交由外部事务控制
NESTED(6); ...
}

隔离机制(4种)

package org.springframework.transaction.annotation;

/**
* 从上到下,数据完整性提升,但支持并发量依次减少
*/
public enum Isolation {
// 默认,根据不同数据库的实现
DEFAULT(-1),
// 读未提交,存在脏读、不可重复读、幻读问题
READ_UNCOMMITTED(1),
// 读已提交(oracle、sqlserver默认),解决了脏读问题,存在不可重复读、幻读问题
READ_COMMITTED(2),
// 可重复读(mysql Innodb默认),解决了脏读、不可重复读问题,存在幻读问题
REPEATABLE_READ(4),
// 完全串行执行,只要同一个DB,sql完全是串行执行的,即使部署了集群(8080和8081两个节点的sql也是串行执行的)
SERIALIZABLE(8); ...
}

事务嵌套(详情看代码)

首先要搞清楚一个问题,就是加不加try catch的问题,如果内层事务throw出去一个异常,外层事务没有try catch,势必也会触发异常,而这个异常可能就是外层事务回滚的条件。

REQUIRED:内层或外层事务回滚,整个事务都会回滚

REQUIRED_NEW:内外层事务相对独立,内层事务回滚不影响外层事务,外层回滚不影响内层事务

NESTED:事务的提交、回滚是由外层事务控制的。内层事务异常回滚会回滚到savepoint(没搞懂怎么配置这个,谁会可以给我留个言),不影响外层事务(需要try catch包住内层事务的函数)外层事务回滚,内层事务也会回滚)

测试代码

https://gitee.com/wlyfree/transaction

spring事务的理解的更多相关文章

  1. 关于Spring事务<tx:annotation-driven/>的理解(Controller可以使用@Transactional)

    在使用SpringMvc的时候,配置文件中我们经常看到 annotation-driven 这样的注解,其含义就是支持注解,一般根据前缀 tx.mvc 等也能很直白的理解出来分别的作用.<tx: ...

  2. Spring事务<tx:annotation-driven/>的理解(Controller使用@Transactional)

    在使用Spring的时候,配置文件中我们经常看到 annotation-driven 这样的注解,其含义就是支持注解,一般根据前缀 tx.mvc 等也能很直白的理解出来分别的作用. <tx:an ...

  3. Spring事务<tx:annotation-driven/>的理解

    在使用Spring的时候,配置文件中我们经常看到 annotation-driven 这样的注解,其含义就是支持注解,一般根据前缀 tx.mvc 等也能很直白的理解出来分别的作用. <tx:an ...

  4. [转]Spring事务<tx:annotation-driven/>

    在使用SpringMVC的时候,配置文件中我们经常看到 annotation-driven 这样的注解,其含义就是支持注解,一般根据前缀 tx.mvc 等也能很直白的理解出来分别的作用.<tx: ...

  5. spring事务的传播性的理解

    来自至顶网的文章 http://developer.zdnet.com.cn/2007/0521/402066.shtml

  6. 简述Spring事务有几种管理方法,写出一种配置方式

    Spring事务有两种方式: 1.编程式事务:(代码中嵌入) 2.声明式事务:(注解,XML) 注解方式配置事务的方式如下: 首先,需要在applicationContext.xml中添加启动配置,代 ...

  7. spring事务之事务传播机制和隔离级别

    Spring事务传播行为 运用Spring事务,必须要深入理解它的传播机制,否则会遇到各种意想不到的坑,Spring定义了七种传播行为. public interface TransactionDef ...

  8. 【spring】 <tx:annotation-driven /> 的理解 【转载的】

    在使用SpringMvc的时候,配置文件中我们经常看到 annotation-driven 这样的注解,其含义就是支持注解,一般根据前缀 tx.mvc 等也能很直白的理解出来分别的作用.<tx: ...

  9. spring事务管理器的源码和理解

    原文出处: xieyu_zy 以前说了大多的原理,今天来说下spring的事务管理器的实现过程,顺带源码干货带上. 其实这个文章唯一的就是带着看看代码,但是前提你要懂得动态代理以及字节码增强方面的知识 ...

  10. Spring配置--tx事务配置方式

    前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...

随机推荐

  1. ZigZag编码

    ZigZag编码 在网络传输和数据存储场景中,需要对数据进行压缩.数据压缩的算法非常多,但大部分的数据压缩算法的原理是通过某种编码方式不存储数据中的0比特位,因此0比特位越多,数据压缩的效果越好.Zi ...

  2. Mac下安装Fiddler抓包工具(别试了,会报错,没办法使用)

    下载: https://www.telerik.com/download/fiddler 离线版本:(链接: https://pan.baidu.com/s/1hr7f8QK 密码: ukg2) 安装 ...

  3. 【Guava】Optional接口来避免空指针错误

    null会带来很多问题,从开始有null开始有无数程序栽在null的手里,null的含义是不清晰的,检查null在大多数情况下是不得不做的,而我们又在很多时候忘记了对null做检查,在我们的产品真正投 ...

  4. solr实时更新mysql数据的方法

    第一步:创建core core是solr的特有概念,每个core是一个查询数据,.索引等的集合体,你可以把它想象成一个独立数据库,我们创建一个新core:名字[core1] 进入linux命令行,进入 ...

  5. jquery mobile 动态加载标签时,无法正常展示样式

    原因 在chrome中审查元素,发现其增加了很多没有直接写在页面上的标签和样式.页面标签首先经过jquery.mobile-1.4.5.min.js的处理,添加了许多标签,然后再用css布局 解决方案 ...

  6. PHP之string之trim()函数使用

    trim (PHP 4, PHP 5, PHP 7) trim - Strip whitespace (or other characters) from the beginning and end ...

  7. java代理-cglib

    前面说到了java的动态代理,但是动态代理依赖于接口,这次来看看cglib来实现的代理... 假设有如下方法,这回没有说接口哦~ package proxy.cglibProxy; public cl ...

  8. sqlplus 调试存储过程

    SQLPLUS里测试带返回参数的存储过程过程名p_test入参 aa varchar2出参 bb sys_refcursor 在SQLPLUS里如何将sys_refcursor 这个结果集获取出来呢 ...

  9. <数据挖掘导论>读书笔记9聚类分析

    1. 聚类分析仅根据在数据中发现的描述对象及其关系的信息,将数据对象分组. 其目标是组内的对象相互之间是相似的或者相关的,而不同组中的对象是不同的或者不相关的. 2.聚类分析的重要技术 K均值:K均值 ...

  10. android系统权限的管理

    被权限搞了好久,决定好好的研究一下: 参考资料 http://blog.csdn.net/xieyan0811/article/details/6083019?reload http://blog.c ...