特性

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

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

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

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

说到底都是为了一致性,才引出原子性、隔离性和持久性,之前在知乎看到过一篇比较好的文章(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. JavaSwing程序设计(目录)

    一.JavaSwing 概述 JavaSwing 图形界面概述 二.JavaSwing 基本组件 JLabel(标签) JButton(按钮) JTextField(文本框) JPasswordFie ...

  2. excel 正则表达式用法

    Private Sub RegEx_Replace()        Dim myRegExp As Object      Dim Myrange As Range, C As Range      ...

  3. Mac下常用按键符号⌘(command)、⌥(option)、⇧(shift)、⇪(caps lock)、⌃(control)、↩(return)、⌅(enter)

    常用符号如下: ⌘(command) ⌥(option) ⇧(shift) ⇪(caps lock) ⌃(control) ↩(return) ⌅(enter) 对应键盘的位置如下: 如果每次都不记得 ...

  4. springboot项目:Redis缓存使用

    保存Redis 第一步:启动类中加入注解 @EnableCaching package com.payease; import org.springframework.boot.SpringAppli ...

  5. display:block、inline、inline-block的区别及应用案例

    A.display:block就是将元素显示为块级元素. block元素的特点是: 1.总是在新行上开始: 2.高度,行高以及顶和底边距都可控制: 3.宽度缺省是它的容器的100%,除非设定一个宽度; ...

  6. Java 正则表达式 中的 任意字符

    原来正则表达式中的"."代表的是除换行以外的任意字符,如果要真正代表任意字符,需要把换行符也加进去,但是经过测试"[.\\n]"不生效,可以使用"\\ ...

  7. Debian9安装SSH并允许root用户SSH登录

    安装SSH # apt install openssh-server openssh-client 启动SSH服务 # /etc/init.d/ssh start 添加SSH开机启动 # update ...

  8. ZOJ 2971 Give Me the Number

    Give Me the Number Numbers in English are written down in the following way (only numbers less than  ...

  9. 亿级别记录的mongodb分页查询java代码实现

    1.准备环境 1.1 mongodb下载 1.2 mongodb启动 C:\mongodb\bin\mongod --dbpath D:\mongodb\data 1.3 可视化mongo工具Robo ...

  10. javascript 遍历

    数组的遍历你都会用了,那Promise版本的呢 这里指的遍历方法包括:map.reduce.reduceRight.forEach.filter.some.every因为最近要进行了一些数据汇总,no ...