spring事务的理解
特性
一致性:业务处理要么都成功,要么都失败,不能部分成功不分失败
原子性:业务操作是由多个动作完成,这些动作不可分割,要么都执行,要么都不执行
隔离性:事务间之间要做隔离,不要互相影响
持久性:操作结果最终都会持久化到持久化存储器中
说到底都是为了一致性,才引出原子性、隔离性和持久性,之前在知乎看到过一篇比较好的文章(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事务的理解的更多相关文章
- 关于Spring事务<tx:annotation-driven/>的理解(Controller可以使用@Transactional)
		
在使用SpringMvc的时候,配置文件中我们经常看到 annotation-driven 这样的注解,其含义就是支持注解,一般根据前缀 tx.mvc 等也能很直白的理解出来分别的作用.<tx: ...
 - Spring事务<tx:annotation-driven/>的理解(Controller使用@Transactional)
		
在使用Spring的时候,配置文件中我们经常看到 annotation-driven 这样的注解,其含义就是支持注解,一般根据前缀 tx.mvc 等也能很直白的理解出来分别的作用. <tx:an ...
 - Spring事务<tx:annotation-driven/>的理解
		
在使用Spring的时候,配置文件中我们经常看到 annotation-driven 这样的注解,其含义就是支持注解,一般根据前缀 tx.mvc 等也能很直白的理解出来分别的作用. <tx:an ...
 - [转]Spring事务<tx:annotation-driven/>
		
在使用SpringMVC的时候,配置文件中我们经常看到 annotation-driven 这样的注解,其含义就是支持注解,一般根据前缀 tx.mvc 等也能很直白的理解出来分别的作用.<tx: ...
 - spring事务的传播性的理解
		
来自至顶网的文章 http://developer.zdnet.com.cn/2007/0521/402066.shtml
 - 简述Spring事务有几种管理方法,写出一种配置方式
		
Spring事务有两种方式: 1.编程式事务:(代码中嵌入) 2.声明式事务:(注解,XML) 注解方式配置事务的方式如下: 首先,需要在applicationContext.xml中添加启动配置,代 ...
 - spring事务之事务传播机制和隔离级别
		
Spring事务传播行为 运用Spring事务,必须要深入理解它的传播机制,否则会遇到各种意想不到的坑,Spring定义了七种传播行为. public interface TransactionDef ...
 - 【spring】 <tx:annotation-driven /> 的理解  【转载的】
		
在使用SpringMvc的时候,配置文件中我们经常看到 annotation-driven 这样的注解,其含义就是支持注解,一般根据前缀 tx.mvc 等也能很直白的理解出来分别的作用.<tx: ...
 - spring事务管理器的源码和理解
		
原文出处: xieyu_zy 以前说了大多的原理,今天来说下spring的事务管理器的实现过程,顺带源码干货带上. 其实这个文章唯一的就是带着看看代码,但是前提你要懂得动态代理以及字节码增强方面的知识 ...
 - Spring配置--tx事务配置方式
		
前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...
 
随机推荐
- 求幂大法,矩阵快速幂,快速幂模板题--hdu4549
			
hdu-4549 求幂大法.矩阵快速幂.快速幂 题目 M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 ...
 - Mac 10.12安装Go2Shell在资源管理器快速打开Shell并跳转到指定位置
			
下载: (链接: https://pan.baidu.com/s/1qXAUqxY 密码: bf7g)
 - Mac OS X中Launchpad的图标添加删除方法(添加方法别试了,和Linux很大区别)
			
说明:在Mac下的Launchpad图标添加和删除都与应用程序的app文件有关,如果单纯的只想在Launchpad添加自定义的图标,然后指定要某条命令运行时,建议不要这么干,Launchpad的图标管 ...
 - 在linux上安装 sql server for linux
			
在linux上安装 sql server for linux Install SQL Server on Red Hat Enterprise Linux Install SQL Server To ...
 - webpack使用 babili-webpack-plugin 报错 "original.line and original.column are not numbers"
			
按照这个解决 https://github.com/chentsulin/electron-react-boilerplate/issues/1300 changing "babili-we ...
 - 使用wireshark出现Couldn't run /usr/bin/dumpcap in child process: Permission denied解决办法
			
sudo apt-get install libcap2-bin wireshark sudo chgrp myusername /usr/bin/dumpcap # myusername是你使用wi ...
 - Linux下iptables 禁止端口和开放端口
			
1.关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放.下面是命令实现: iptables -P INPUT DROP iptables -P FORWARD DROP iptab ...
 - java多线程---------java.util.concurrent并发包----------ThreadPoolExecutor
			
ThreadPoolExecutor线程池 一.三个构造方法 ThreadPoolExecutor(int corePoolSize,int MaxmumPoolSize,long KeepAlive ...
 - IOS折线图
			
做项目要统计商品的销售情况,美工那边给了效果图,自己就按照效果图自定义了一个ScrollView.整体效果不错,在做的过程中遇到的问题也记录一下. 现在这个还有许多优化的地方: 1.一个表中只能画一个 ...
 - Java学习--jsp基础语法
			
<%! %>和<% %>的区别: <%! //1.可定义方法 //2.可定义static方法 //3.可定义static属性 //4.不可以使用out对象 %> ...