- 浏览: 316394 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (254)
- java (178)
- tomcat (6)
- 邮件 (1)
- smtp (1)
- Linux (2)
- 编码 (2)
- 导入工程 (1)
- Specification Level (1)
- hibernate (10)
- 字段类型 (1)
- 字段类型匹配 (1)
- 数据库 (3)
- sql (9)
- struts2 (8)
- 类型转换 (2)
- java,MyEclipse,SVN (1)
- Myecplise (4)
- 输入校验 (1)
- JFrame (2)
- Oracle (8)
- google (1)
- Swing (3)
- Fusioncharts (1)
- 找工作 (0)
- js (4)
- jsp (11)
- displaytag (1)
- spring (8)
- 工作 (1)
- String (1)
- 算法 (2)
- IO (1)
- xml (3)
- 设计模式 (1)
- UML (1)
- 文档 (1)
- ajax (1)
- 日常 (7)
- sql server (1)
- mysql (3)
- git (1)
- Maven (1)
- mongodb (1)
- postman (1)
最新评论
http://blog.csdn.net/huilangeliuxin/article/details/43446177
以上一系列文章
比如Serveice里面的某个受写事务控制的方法A里面可能会调用其他service里的B方法(此方法也是受事务控制的),也可能会调用Dao里的某些方法。
其实,说白了,所有的业务上的事务底层都是数据库事务实现的。
受事务控制的方法里面所有地方用的数据库连接都是同一个,A和B是否走同一个事务有几种情况可能出现:
1、如果A受事务控制,B不受事务控制,则B肯定会跟着A走同一个事务。
2、如果A受事务控制,B也受事务控制,则B是否和A走同一个事务是根据配置的事务传播特性决定的(一般是Spring的配置文件里配置的),最常见常用的配置是propagation="REQUIRED",
这个配置就表示A方法里面所有调用的其他service里的方法或Dao里的方法,都是和A走的同一个事务。
当然,如果把propagation配置成其他属性,会出现A和B各自用不同的事务,也就是说A和B分别开启事务,这种的就会存在一种情况就是,程序在A里面执行开启一个事务,当执行到B又单独
开启一个事务,之后B执行完了,A再继续执行,此时A报错了,A进行回滚,但是由于B和A的事务是分开的,所以B不会回滚,这就相当于不是所有的业务逻辑都回滚了,还差一部分,而那一部分
自己恢复不了了,还得想其他办法。
A和B到底走一个事务还是走两个事务,是根据配置的事务传播特性决定的,咱们当前配置的都是REQUIRED,这种的A和B都是走同一个事务的。
假如B在执行的过程中抛异常或报错了,但是B自己捕获处理了,这种的就不会报错,会继续往下执行,事务也不会回滚。
假如B在执行的过程中抛异常或报错了,但是B没有处理,直接抛出了,抛给A了,A也可以进行捕获处理,
如果A捕获处理了,那事务不会管,继续往下执行,如果A没有捕获,继续往上抛,从A这个方法里抛出去了,抛给上层,这种的A事务就会直接回滚。
说白了,也就是说,无论什么情况,只要从A方法里直接抛出异常或错误了,那么对应A的那个事务直接就会回滚。如果出错了,但是在A里面自己捕获处理了,这种的事务不会回滚,继续往下执行。
但是假如A里面出现了远程服务调用(http或hessian调用),这种的如果在执行的过程中远程调用出现问题抛出异常或抛出错误(http调用或hessian调用抛出异常或错误),这种的如果在A里面
没有捕获处理的话那就会直接在A方法抛出异常,抛给上层,这种的A对应的事务会回滚,A里面不涉及远程调用的其余的业务都能回滚,但是远程调用里面的已经改过的业务就回滚不了了,因为
在远程他也不知道自己要回滚,也没有办法回滚。这种的一般处理方式有下面几种:
1、也有处理的策略是,先让远程操作成功,然后本地操作。本地失败,调用远程失败接口(必须提供远程的失败回滚接口)。这种是要求比较严格的那种。就是这次操作必须两边一致。
2、另一种方式是,假设我A系统成功了,然后我就想办法让B执行成功。如果失败了,我通过定时任务或者队列,一直调用直到成功结束。
这里会配置只要继承exception的异常被抛出,都要回滚
可以多看看慕课网上关于事务的视频。沈寻
以上一系列文章
比如Serveice里面的某个受写事务控制的方法A里面可能会调用其他service里的B方法(此方法也是受事务控制的),也可能会调用Dao里的某些方法。
其实,说白了,所有的业务上的事务底层都是数据库事务实现的。
受事务控制的方法里面所有地方用的数据库连接都是同一个,A和B是否走同一个事务有几种情况可能出现:
1、如果A受事务控制,B不受事务控制,则B肯定会跟着A走同一个事务。
2、如果A受事务控制,B也受事务控制,则B是否和A走同一个事务是根据配置的事务传播特性决定的(一般是Spring的配置文件里配置的),最常见常用的配置是propagation="REQUIRED",
这个配置就表示A方法里面所有调用的其他service里的方法或Dao里的方法,都是和A走的同一个事务。
当然,如果把propagation配置成其他属性,会出现A和B各自用不同的事务,也就是说A和B分别开启事务,这种的就会存在一种情况就是,程序在A里面执行开启一个事务,当执行到B又单独
开启一个事务,之后B执行完了,A再继续执行,此时A报错了,A进行回滚,但是由于B和A的事务是分开的,所以B不会回滚,这就相当于不是所有的业务逻辑都回滚了,还差一部分,而那一部分
自己恢复不了了,还得想其他办法。
A和B到底走一个事务还是走两个事务,是根据配置的事务传播特性决定的,咱们当前配置的都是REQUIRED,这种的A和B都是走同一个事务的。
假如B在执行的过程中抛异常或报错了,但是B自己捕获处理了,这种的就不会报错,会继续往下执行,事务也不会回滚。
假如B在执行的过程中抛异常或报错了,但是B没有处理,直接抛出了,抛给A了,A也可以进行捕获处理,
如果A捕获处理了,那事务不会管,继续往下执行,如果A没有捕获,继续往上抛,从A这个方法里抛出去了,抛给上层,这种的A事务就会直接回滚。
说白了,也就是说,无论什么情况,只要从A方法里直接抛出异常或错误了,那么对应A的那个事务直接就会回滚。如果出错了,但是在A里面自己捕获处理了,这种的事务不会回滚,继续往下执行。
但是假如A里面出现了远程服务调用(http或hessian调用),这种的如果在执行的过程中远程调用出现问题抛出异常或抛出错误(http调用或hessian调用抛出异常或错误),这种的如果在A里面
没有捕获处理的话那就会直接在A方法抛出异常,抛给上层,这种的A对应的事务会回滚,A里面不涉及远程调用的其余的业务都能回滚,但是远程调用里面的已经改过的业务就回滚不了了,因为
在远程他也不知道自己要回滚,也没有办法回滚。这种的一般处理方式有下面几种:
1、也有处理的策略是,先让远程操作成功,然后本地操作。本地失败,调用远程失败接口(必须提供远程的失败回滚接口)。这种是要求比较严格的那种。就是这次操作必须两边一致。
2、另一种方式是,假设我A系统成功了,然后我就想办法让B执行成功。如果失败了,我通过定时任务或者队列,一直调用直到成功结束。
这里会配置只要继承exception的异常被抛出,都要回滚
可以多看看慕课网上关于事务的视频。沈寻
发表评论
-
领域精通涉及技术点(不分先后)
2017-12-20 19:35 571Java8 netty jvm kafaka消息队列 上传下载 ... -
计算机各种单位讲解及换算
2017-12-13 13:54 1557我还听过有UK的 一、最小单位:位(bit,缩写为b) 在原 ... -
JAVA字符串格式化-String.format()和MessageFormat的使用
2017-12-05 10:39 1304String.format()常规类型的格式化 Stri ... -
eclipse启动项目常见问题
2017-11-16 17:46 1151今儿遇到了个问题,ecli ... -
字符编码笔记:ASCII,Unicode和UTF-8
2017-10-23 16:37 432讲的太牛逼了: http://ww ... -
emoji简单讲解
2017-10-23 15:17 929emoji处理方式大起底 http://blog.csdn.n ... -
BigDecimal讲解
2017-10-12 15:58 413BigDecimal 由任意精度的整数非标度值 和 32 位的 ... -
eclips 控制台console上不打印信息
2017-09-06 21:53 5521、进windows菜单 -> show view -& ... -
详解RequestMappingHandlerMapping和RequestMappingHandlerAdapter
2017-08-29 17:08 2922http://donald-draper.iteye.com/ ... -
用@ExceptionHandler 来进行切面异常处理
2017-08-29 11:47 2243有时候我们想处理某个类里Controller中抛出的异常怎么搞 ... -
Spring 注解@Component、@Repository、@Service、@Controller区别
2017-08-28 15:27 977spring 2.5 中除了提供 @Com ... -
线程的一点小总结
2017-08-23 20:36 673java中main方法启动的是一个进程还是一个线程? 答:是一 ... -
线程池
2017-08-23 17:35 490诸如Web 服务器、数据库 ... -
Class源码大概讲解
2017-08-23 16:47 483http://blog.csdn.net/a327369238 ... -
Spring 事务相关
2017-08-14 12:10 445Transactionz注解的readOnly ... -
把时间当做朋友-前言
2017-08-13 20:47 375要管理的不是时间,而是自己。人们生活在同一个世界,却又各自 ... -
单例里面的方法讲解
2017-08-11 14:55 466spring里的controller是单例的。系统针对每个co ... -
eclipse拷贝出来的项目名称还是原来的
2017-07-26 16:46 1038需要修改的有如下几个地方: 1、pom.xml里面打包的名字一 ... -
自定义hibernate方言,新增自定义函数
2017-06-27 10:47 851按位与运算(&)在许多数据库中都是支持的,遗憾的是,H ... -
http请求参数:header body paramter三种参数区别、联系
2017-06-19 10:46 479112345
相关推荐
java-事务 test aa
班级事务-班级事务系统-班级事务系统源码-班级事务管理系统-班级事务管理系统java代码-班级事务系统设计与实现-基于ssm的班级事务系统-基于Web的班级事务系统设计与实现-班级事务网站-班级事务网站代码-班级事务平台...
12012_RocketMQ_Producer_事务消息机制详解 13013_RocketMQ_Consumer_Push和Pull模式及使用详解 14014_RocketMQ_Consumer_配置参数详解 15015_RocketMQ_Consumer_重试策略详解 16016_RocketMQ_Consumer_幂等去重策略...
班级事务-班级事务系统-班级事务系统源码-班级事务管理系统-班级事务管理系统java代码-班级事务系统设计与实现-基于ssm的班级事务系统-基于Web的班级事务系统设计与实现-班级事务网站-班级事务网站代码-班级事务平台...
班级事务管理系统-班级事务管理系统的设计与实现代码-java-ssm-基于ssm的班级事务管理系统项目-代码-源码-项目-系统-毕设-网站 1、技术栈:java,ssm,vue,ajax,maven,mysql,MyBatisPlus等 2、系统的实现 用户...
Java-24_通用设计_分布式事务_TCC.rar
讲解java事务设计策略,对于java中事务的讲解非常的清晰。
Java-25_通用设计_分布式事务_消息队列.rar
Java-23_通用设计_分布式事务_2PC.rar
5、zookeeper的java -Curator(服务注册与发现)...该示例会涉及到本专栏下的其他文章,比如:4、zookeeper的java三种客户端介绍-Curator(crud、事务操作、监听、分布式计数器、分布式锁) 等文章,都是在该专栏下的。
java代码-使用java解决数据库事务处理的源代码 ——学习参考资料:仅用于个人学习使用!
高校办公室行政事务管理系统-高校办公室行政事务管理系统的设计与实现代码-java-springboot-基于springboot的高校办公室行政事务管理系统项目-代码-源码-项目-系统-毕设-网站 1、技术栈:java,springboot,vue,ajax...
GBASE)成立于2004年,注册资金1.6亿元,公司自成立以来始终坚持自主创新,产品的核心技术及底层代码自主可控,构建了覆盖数据管理全生命周期,包括分析型、事务型、分布式事务型、云原生数据仓库等全技术栈的数据...
java分布式事务demo
班级事务管理系统的设计与实现代码-java-ssm-基于ssm的班级事务管理系统项目-代码-源码-项目-系统-毕设-网站 1、技术栈:java,ssm,vue,ajax,maven,mysql,MyBatisPlus等 2、系统的实现 用户信息 图片素材 视频...
采用java技术构建的一个管理系统。整个开发过程首先对系统进行需求分析,得出系统的主要功能。接着对系统进行总体设计和详细设计。总体设计主要包括系统功能设计、系统总体结构设计、系统数据结构设计和系统安全设计...
通过该架包,您可以轻松实现各种数据库操作,包括数据的增、删、改、查以及事务处理等。无论您是开发Web应用程序、后端服务还是其他类型的Java应用,Java-Mysql5.1.9链接架包都能够满足您的需求,并提供出色的性能和...