JAVA 事务回滚方法调用非事务回滚方法
事务回滚方法调用非事务回滚方法,如果非回滚方法发生异常, 非回滚方法里执行的持久化操作会被回滚吗 ?
1. 会被混滚
2,但是指定不会滚的异常类型,就可以避免发生回滚
看代码:
@Transactional(rollbackFor = Exception.class)public void test() {TbLog log = new TbLog();log.setId("3");log.setOperationContent("事物回滚测试:有回滚注解");tbLogService.create(log);test1();}private void test1(){for (int i = 1; i <3 ; i++) {if (i==2){throw new RestClientException("事物回滚测试");}TbLog log = new TbLog();log.setId(String.valueOf(i));log.setOperationContent("事物回滚测试:没注解");tbLogService.create(log);}}
事物回滚方法 test() 调用了不回滚方法test1() , test1()方法会抛出RestClientException异常,测试发现:抛异常后之前所有的持久化操作都发生了回滚;
在做测试:
下面在test()方法的事务里添加不会滚的异常类型RestClientException , 经测试不会发生回滚, 所以你如果想不让他回滚, 可以在事务里指定不回滚的类型, 在不想发生回滚的方法把全部会发生异常的地方,全部抛出指定类型异常就不会,如:RestClientException,就可以避免回滚;
@Override@Transactional(rollbackFor = Exception.class,noRollbackFor = RestClientException.class)public void test() {TbLog log = new TbLog();log.setId("3");log.setOperationContent("事物回滚测试:有回滚注解");tbLogService.create(log);test1();}private void test1(){for (int i = 1; i <3 ; i++) {if (i==2){throw new RestClientException("事物回滚测试");}TbLog log = new TbLog();log.setId(String.valueOf(i));log.setOperationContent("事物回滚测试:没注解");tbLogService.create(log);}}
或者你想test1()不使用事务,并且不影响test()方法, 可以在方法test1() 上配置挂起事务,(当然推荐这种方法),简单粗暴,一眼明了
这种方法要求test方法调用Spring代理类的test01方法. 就是不能放在一个类里面,需要定义在另一个类里面 并注册进Spring容器
@Override@Transactional(rollbackFor = Exception.class)public void test() {TbLog log = new TbLog();log.setId("3");log.setOperationContent("事物回滚测试:有回滚注解");tbLogService.create(log);test1();}//挂起事务@Transactional(propagation = Propagation.NOT_SUPPORTED)private void test1(){for (int i = 1; i <3 ; i++) {if (i==2){throw new RestClientException("事物回滚测试");}TbLog log = new TbLog();log.setId(String.valueOf(i));log.setOperationContent("事物回滚测试:没注解");tbLogService.create(log);}}
JAVA 事务回滚方法调用非事务回滚方法相关推荐
- Spring事务内方法调用自身事务
Spring事务内方法调用自身事务 增强的三种方式 ServiceA.java文件: 查看Spring Tx的相关日志: 可以看到只创建了一个事物ServiceA.service方法的事务,但是cal ...
- WCF分布式开发常见错误(13):此方法调用的事务被异步中断
今天WCF事务编程的时候遇到这个错误:The transaction under which this method call was executing was asynchronously abo ...
- 为什么静态方法无法直接调用非静态成员变量和方法
静态方法无法直接调用非静态成员变量和方法 看到这句话,要想到形容的是这样的如下 静态方法里面无法调用非静态变量 下面在写一个对比非静态的方法和静态方法调用变量对比 问题原因 静态变量和静态的方法是属于 ...
- spring同一个类中,一个方法调用另外一个注解(@Transactional)方法时,注解失效
title: "spring同一个类中,一个方法调用另外一个注解(@Transactional)方法时,注解失效" url: "https://wsk1103.githu ...
- Spring 事务方法与非事务方法相互调用 @Transactional 注解失效不回滚?
写这篇文章的初衷呢就是最近遇到了一个Spring事务的大坑.与其说是坑,还不如说是自己事务这块儿太薄弱导致的(自嘲下). 项目环境 Spring Boot 下面开始问题描述,发生的过程有点长,想直接看 ...
- Spring事务方法与非事务方法执行相互调用不回滚,你踩过这个坑没?
作者:西风一任秋 blog.csdn.net/m0_38027656/article/details/84190949 写这篇文章的初衷呢就是最近遇到了一个spring事务的大坑.与其说是坑,还不如 ...
- mysql 回滚失败_Mysql非事务表回滚失败的现象
执行ROLLBACK(回滚)时,如果收到下述消息,表示事务中使用的1个或多个表不支持事务: 警告:某些更改的非事务性表不能被回滚. 这些非事务性表不受ROLLBACK语句的影响. 如果在事务中意外地混 ...
- springboot 调用方法事物_SpringBoot 内部方法调用,事务不起作用的原因及解决办法...
在做业务开发时,遇到了一个事务不起作用的问题.大概流程是这样的,方法内部的定时任务调用了一个带事务的方法,失败后事务没有回滚.查阅资料后,问题得到解决,记录下来分享给大家. 场景 我在这里模拟一个场景 ...
- java main方法调用非静态方法_java中main函数怎么调用外部非static方法
展开全部 方法可以分为静态方法和实例方法 在main函数里调用非static方法(实例方法),那么32313133353236313431303231363533e78988e69d833133336 ...
- 自定义工具类Static方法调用业务中Service层方法
文章目录 前言 一.如何实现? 二.Util工具类实现 代码相关注解 总结 前言 今天需要验证OpenId,来看是否为系统用户,直接封装一个工具类,遇到了调用业务层service的方法.记一次学习笔记 ...
最新文章
- npm run mock | npm run dev只能启动一个
- 吴杭民:上海的生活成本高过纽约(贪污腐败横行)
- maven 包的导入
- [Qt入门]消息对话框创建
- 中原标准时间对时_GPS对时系统(时间同步系统)应用电子政务
- 【算法】希尔排序 推导方法
- Android WebService
- vijos p1782——借教室(noip2012提高组第2题)
- 进一步优化SPA的首屏打开速度(模块化与懒载入) by 嗡
- getBoundingClientRect()兼容性处理
- Ansible tower 3.7.0-4自动化运维管理安装方法
- 分享一个电脑截动图的软件LICEcap
- win7升级到win10所遇到的坑
- SeaWeedfs 分布式网络文件存储介绍
- 管理的常识(2):什么是领导
- 数据库 1NF、2NF、3NF、BCNF
- ENSP实验六——三层交换机+路由器
- linux 内核usleep,Linux的sleep()和usleep()的使用和区别
- 金山软件2015校园招聘
- 日历日程安排表格calendar