Spring @Transactional 抛出异常,会在什么时候回滚? [问题点数:40分]

Bbs1
本版专家分:0
结帖率 0%
Bbs1
本版专家分:35
Bbs1
本版专家分:35
Bbs1
本版专家分:35
Bbs1
本版专家分:0
Bbs1
本版专家分:35
Bbs2
本版专家分:299
Bbs2
本版专家分:299
Bbs1
本版专家分:73
Bbs2
本版专家分:299
Bbs1
本版专家分:67
Bbs8
本版专家分:36545
Blank
进士 2017年 总版技术专家分年内排行榜第九
Blank
红花 2017年11月 Java大版内专家分月排行榜第一
2017年10月 Java大版内专家分月排行榜第一
2017年9月 Java大版内专家分月排行榜第一
2017年8月 Java大版内专家分月排行榜第一
2017年7月 Java大版内专家分月排行榜第一
2017年6月 Java大版内专家分月排行榜第一
2017年5月 Java大版内专家分月排行榜第一
2017年4月 Java大版内专家分月排行榜第一
2017年3月 Java大版内专家分月排行榜第一
2017年2月 Java大版内专家分月排行榜第一
Blank
蓝花 2017年12月 Java大版内专家分月排行榜第三
Bbs1
本版专家分:16
Bbs1
本版专家分:10
Bbs2
本版专家分:299
Bbs2
本版专家分:299
Bbs2
本版专家分:153
Bbs1
本版专家分:0
@Transactional注解事务回滚在控制层不起作用
首先需要添加注解方式配置事务 controller代码 shopService.insertUserAndShop(shop, adminuser); ShopServiceImpl代码 @Override @Transactional(propagation=Propagati
Springboot中声明事务@Transactional,为何有时候声明了事务报异常数据却不会回滚
@Transactional 这个注解相信大家都不陌生,这是事务的注解,什么是事务,无非就是未保证数据一致性,当出现任何异常时候出现数据<em>回滚</em> 注解是是不需要写提交事务的。 那么,最近我发现,这个@Transactional的注解,并不是所有异常都可以进行数据<em>回滚</em>,他只有是RuntimeException类及其子类(中文称为:运行时异常/unchecked异常/未检异常)异常的时候才会进行数据...
Spring中的@Transactional事物回滚实例源码
Spring中的@Transactional事物<em>回滚</em>实例源码
@Transactional 异常并未回滚
@Transactional 今天测试的同学帮忙测试出一个BUG,说是一个函数中的数据库操作执行失败,但是没有<em>回滚</em>。 期初我很诧异,我明明加了在类上面加了事务引用,怎么没<em>回滚</em>。 查来查去,发现是我对Transactional 了解不够清楚。 默认情况下,Exception是不会引起<em>回滚</em>操作的,RuntimeException才会引起<em>回滚</em>操作。 半瓶
声明式事务不回滚@Transactional的避坑正确使用
在我们开发中很多时候都要用到事务,例如转账等等的操作,这些我就不多BB了,哈哈。下面我来说下关于Spring的声明式事务@Transaction的坑,我想最大的坑应该还是代理事务不生效的问题,下面放个链接,以免别人问。https://blog.csdn.net/weixin_41485592/article/details/80031597下面我要说的又是一个坑,也是声明式事务不<em>回滚</em>的问题。重点来...
spring+mybatis声明式事务@Transaction无效抛出异常回滚
测试代码如下: <em>抛出异常</em>不<em>回滚</em>,百度无果,只好下载源码调试,开始对<em>spring</em>源码并不清楚,调试的时候也是晕头转向,经过两天的摸索算是有些初步了解. doGetResource每次都为null(见下图),因为null所以每次都会重新从连接池获取链接, 每次从连接池获取链接就不能保证两次获取的链接是同一个,不是同一个链接就不会支持事务<em>回滚</em>. 突破口就是resources.get()获取的map...
springboot中关于@Transactional事务注解不能回滚的原因
@Override @Transactional(readOnly = false,rollbackFor=Exception.class,propagation=Propagation.REQUIRED) public ResultBean&amp;lt;String&amp;gt; test(GoodsInfo goodsInfo) { try { GoodsInfo goodsInfo1 ...
spring @Transactional注解用于事务回滚案例
这里基于小编的这篇博文的<em>spring</em>配置和实体类,service类为基础,解释@Transactional注解: https://blog.csdn.net/csdnliuxin123524/article/details/80935836; 注意这里@Transcational注解起作用的前提是要使用<em>spring</em>的声明式事务: &amp;lt;!-- 配置声明式事务 --&amp;gt; &amp;...
Spring中@Transactional事务回滚
一、Spring 默认事务 Spring中@Transactional事务,默认情况下只对 RuntimeException <em>回滚</em>。 即: 如果被注解的数据库操作方法中发生了unchecked异常(RuntimeException),所有的数据库操作将rollback; 如果发生的异常是checked异常(Exception),默认情况下数据库操作还是会提交的。 也就是说,默认情况下,如果程序...
@Transactional 回滚不生效原因
@Transactional <em>回滚</em>不生效原因 事务的管理方式有两种,第一种是编程式事务管理,需要将数据库的自动提交等取消,并且需要自己编写事务代码,第二种则是声明式事务管理模式,<em>spring</em>利用<em>spring</em> AOP特性编写了注解即题目中所提到的方式来管理事务,避免开发人员编写大量的事务代码。 一、特性 先来了解一下@Transactional注解的特性吧,可以更好排查问题 1. servi...
代码抛出异常后进行事务回滚的两种方式(Spring @Transactional注解)
需求 在service层的某个方法中,在执行完一个对数据库的写方法后,<em>抛出异常</em>,再执行另一个对数据库的写方法,伪代码如下: @Transactional public void func() { dao.write(pojo1); throw new Exception(&amp;amp;amp;quot;异常&amp;amp;amp;quot;); dao.write(pojo2); } 要求此时事务全部<em>回滚</em>,即pojo1和pojo2都不写进数据库。 单...
Spring异常抛出触发事务回滚策略
Spring、EJB的声明式事务默认情况下都是在抛出unchecked exception后才会触发事务的<em>回滚</em>  测试用业务逻辑方法:    整个包裹起来,则这个业务方法也就等于脱离了<em>spring</em>事务的管理,因为没有任何异常会从业务方法中抛出!全被捕获并吞掉,导致<em>spring</em>异常抛出触发事务<em>回滚</em>策略失效。  不过,如果在catch代码块中采用页面硬编码的方式使用<em>spring</em> a
Spring中声明式事务的注解@Transactional的参数的总结(REQUIRED和REQUIRES_NEW的与主方法的回滚问题)
一、事务的传播行为 1.介绍 当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。 2.属性 事务的传播行为可以由传播属性指定。Spring定义了7种类传播行为。 系统默认的是REQUIRED属性。 常用的是REQUIRED和REQUIRES_NEW,所以此处只说明这两种属性。 下
Spring MVC @Transactional注解方式事务无法回滚的解决办法
前文提到,最新换了框架,新项目用SpringMVC + <em>spring</em> JdbcTemplate。搭框架时,发现了一个事务无法正常<em>回滚</em>的问题,记录如下:首先展示问题:Spring applicationContext.xml配置:[html] view plaincopy           <bean id=“dataSource” class=“org.<em>spring</em>framework.jndi.
spring@transactional事物回滚
<em>spring</em>中的@<em>transactional</em>注解标注事物<em>回滚</em>,但是触发的条件是在抛出RuntimeException后才会触发
Spring事物手动回滚
手动<em>回滚</em>: 方法1:在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动<em>回滚</em>,这样上层就无需去处理异常(现在项目的做法)  方法2:例如service层处理事务,那么service中的方法中不做异常捕获,或者在catch语句中最后增加throw n
@Transactional 无效的解决方案
关于@Transactional注解 一般都认为要注意以下三点 在需要事务管理的地方加@Transactional 注解。@Transactional 注解可以被应用于接口定义和接口方法、类定义和类的 public 方法上 。 @Transactional 注解只能应用到 public 可见度的方法上 。 如果你在 protected、private 或者 package-visible 的方法上
Spring管理事务默认回滚的异常是什么?
问题: Spring管理事务默认(即没有rollBackFor的情况下)可以<em>回滚</em>的异常是什么? 回答: RuntimeException或者Error。 抛出运行时异常,是否<em>回滚</em>?Yes @Transactional public void testTransationA(){ throw new RuntimeException(); }抛出错误,是否<em>回滚</em>?Yes @Transac
Spring添加了注解@Transactional事务不回滚总结
Spring加@Transactional事务不<em>回滚</em> 二、总结 1.首先你要确保你的配置文件正确,当然这个可能性很低,因为架构师都帮你弄好了(针对和当时的我一样的小白而言) 2.如果你的配置文件都正确,那么很有可能你执行数据库更新、插入的时候加了 try  catch 了,所以不
spring 手动抛异常并让事务回滚
try { throw new Exception("test exception!"); } catch ( Exception e ) { e.printStackTrace(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); //
Spring中@Transactional事务回滚失效
一、使用场景举例在了解@Transactional怎么用之前我们必须要先知道@Transactional有什么用。下面举个栗子:比如一个部门里面有很多成员,这两者分别保存在部门表和成员表里面,在删除某个部门的时候,假设我们默认删除对应的成员。但是在执行的时候可能会出现这种情况,我们先删除部门,再删除成员,但是部门删除成功了,删除成员的时候出异常了。这时候我们希望如果成员删除失败了,之前删除的部门也...
注解@Transactional 出现异常不回滚 不起作用
关于使用注解@Transactional,手动<em>抛出异常</em>不<em>回滚</em>现象总结: 我用的是自定义异常直接继承Exception异常,在实际操作中,出现异常后没有<em>回滚</em>,还是把数据写入数据库了。 查了一下资料,只有runtimeexception并且没有被try catch处理的异常才会<em>回滚</em>。另外Transactional可以指定<em>回滚</em>异常,然后我用@Transactional(roobackFor=Exce...
@Transactional 无法回滚
MySQL的数据引擎InnoDB支持事务,而MYISAM不支持事务,所以如果生成的表是MYISAM它就不会滚,在配置文件中加入如下配置,让生成的表变成InnoDB的
@Transactional 出错后不会回滚
用了@Transactional后,执行了多条更新数据库语句,最后两条执行错误,但是没有<em>回滚</em>,简要代码如下: @Transactional public String Test(HttpServletRequest req){ try{ //代码 }catch(Exception ex){ //捕捉异常 } return ""; } 搜索后找到一篇文章:http:
Spring事务注解@Transactional的坑爹陷阱
生产系统凌晨定时任务处理,涉及到核心部分特别是账户处理,结果出问题了,现象很诡异: 1)程序没有按照预定步骤处理数据库相关数据 1)问题偶发,但没有规律 2)发生后也没有发现有死锁,但出现异常的锁 后来在另外一个问题发生时,发现用<em>spring</em> @Transactional注解的数据库事务处理形同虚设
关于Spring的@Transactional注解失效以及事务无法回滚问题
关于Spring的@Transactional注解失效以及事务无法<em>回滚</em>问题@Transactional失效问题最近写的项目中需要一个service中的部分事务执行完就被commit,但是部分service需要失败<em>回滚</em>。因此写在一个大的service中并且加上@Transactional显然是无法满足需求的。 因此这是需要把原先的一个service服务拆分,如原先的serviceA被拆分成servic
@Transactional注解事务手动回滚并且返回错误信息
service层方法名注解 @Transactional(rollbackFor=Exception.class) try{ }catch (Exception e) {  e.printStackTrace();  //打印错误信息 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); //手动回...
spring boot @Transactional注解事务不回滚不起作用无效
参考资料:https://blog.csdn.net/u011410529/article/details/54287307https://my.oschina.net/happyBKs/blog/1624482当@Transactional不起作用如何排查问题。可以按照以下几个步骤逐一确认:1、首先要看数据库本身对应的库、表所设置的引擎是什么。MyIsam不支持事务,如果需要,则必须改为Innn...
[spring,mysql] spring使用注解式事务声明(@Transactional)无法回滚
@Transactional事务<em>回滚</em> 在service类前加上@Transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。 Spring默认情况下会对运行期例外(RunTimeException)进行事务<em>回滚</em>。这个例外是unchecked 如果遇到checked意外就不<em>回滚</em>。 如何改变默认规则: 1 让checked
spring@Transactional事物使用的几点注意
首先贴一下@Transactional注解中常用参数说明参数名称功能描述readOnly该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。例如:@Transactional(readOnly=true)rollbackFor该属性用于设置需要进行<em>回滚</em>的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务<em>回滚</em>。例如:指定单一异常类:@Tr...
必须加@Transactional事务注解才能成功插入数据,原因未知。
项目名:patentFlowManagementProject如果不加事务注解,数据插入失败而且无任何报错,很诡异。 @Override @Transactional public void joinPrefecture(String prefectureId, String userId) throws Exception { Prefecture prefe
帮我看看为什么Transaction回滚之后还是插入数据了,多谢
using (SqlConnection conn = new SqlConnection(Common.GetConnectionString())) { SqlCommand cmd = conn
spring transaction 事务try catch后还是进行的回滚
今天在做项目的时候遇到一个问题,和之前的理论知识不符,之前在学习<em>spring</em> transaction事务的时候,如果自己对方法抛出的异常进行了捕获了,事务是不会<em>回滚</em>的,但是今天我测试后发现并不是这样,
spring手动回滚事务
在Spring的配置文件中,如果数据源的defaultAutoCommit设置为True了,那么方法中如果自己捕获了异常,事务是不会<em>回滚</em>的,如果没有自己捕获异常则事务会<em>回滚</em>,如下例: .... 例子如下: @Transactional(rollbackFor = { Exception.class
spring中事务@Transactional失效,不回滚
我在<em>spring</em>中使用@Transactional标注后,发现并没有效果,多方求解最终找出原因。以下是一些使用此标签的注意事项,如果不按这些规矩来就会失效: 1、在Spring启动项中开启事务 @EnableTransactionManagement 2、@Transactional只作用于public方法上,如果方法是private等其他作用域就不起作用 3、如果@Transaction...
spring事务回滚的问题
在web项目中,很多时候要用到@Transactional 注解方法或者类进行事务处理,
try catch 与 事物回滚@Transactional
问题:正如他所说try {  .......   aaaService.save();  }catch(RuntimeException e) {     bbbService.save(e.getMessage());    throw new RuntimeException(e.getMessage());}
@Transactional注解事务不回滚不起作用无效
这几天在项目里面发现我使用@Transactional注解事务之后,抛了异常居然不<em>回滚</em>。后来终于找到了原因。 如果你也出现了这种情况,可以从下面开始排查。 一、特性 先来了解一下@Transactional注解事务的特性吧,可以更好排查问题 1、service类标签(一般不建议在接口上)上添加@Transactional,可以将整个类纳入<em>spring</em>事务管理,在每个业务方法执行时都会开...
spring 事务
<em>spring</em>事务管理器<em>回滚</em>一个事务的推荐方法是在当前事务的上下文内<em>抛出异常</em>。<em>spring</em>事务管理器会捕捉任何未处理的异常,然后依据规则决定是否<em>回滚</em><em>抛出异常</em>的事务。 默认配置下,<em>spring</em>只有在抛出的异常为运行时unchecked异常时才<em>回滚</em>该事务,也就是抛出的异常为RuntimeException的子类(Errors也会导致事务<em>回滚</em>),而抛出checked异常则不会导致事务<em>回滚</em>。 可以明确的...
TransactionScope的使用--业务层使用多个方法实现回滚解决方案-业务层事务
TransactionScope 分场景使用才可以   System.Transactions 基础结构既提供了基于 Transaction 类的显式编程模型,也提供了使用 TransactionScope 类的隐式编程模型,在后一种模型中,事务由该基础结构自动管理。   重要说明: 建议使用 TransactionScope 类创建隐式事务,以便自动为您管
@Transactional 中使用 try catch之后不会回滚
采坑记录:        使用<em>spring</em>的事务管理的时候,建议在service的try catch中抛出自动异常,然后在controller层做统一的异常处理,再返回给视图。也可以使用切面捕获异常,返回统一的信息给视图。...
Spring中Transactional不添加rollbackFor等属性时的事务回滚问题
昨天同事说Spring的Transactional必须添加rollbackFor = Exception.class,否则事务不会<em>回滚</em>。但我原来试过,抛出RuntimeException时是会<em>回滚</em>的。于是查看Spring的Transactional的API文档,发现下面这段:If no rules are relevant to the exception, it will be treated like DefaultTransactionAttribute (rolling back on runtim
Spring事务不回滚,捕获异常后不抛出不回滚
项目中一个对外提供的接口用try catch捕获异常后不会滚类似这样的方法不会<em>回滚</em> (一个方法出错,另一个方法不会<em>回滚</em>) : if(userSave){ try { userDao.save(user); userCapabilityQuotaDao.save(capabilityQuota);
关于Spring事务回滚@Transactional使用记录
测试@Transactional的在处理异常时是否生效, 首先这里随便写一个update的方法,对数据库进行更新操作,然后在操作完之后抛一个异常 @Override @Transactional(rollbackFor = {Exception.class}) public String alterUser(){ try { User ...
@Transactional(rollbackFor=Exception.class)的使用
java阿里巴巴规范提示:方法【edit】需要在Transactional注解指定rollbackFor或者在方法中显示的rollback。 先来看看异常的分类 error是一定会<em>回滚</em>的 这里Exception是异常,他又分为运行时异常RuntimeException和非运行时异常 可查的异常(checked exceptions):Exception下除了RuntimeExcep...
spring事务不回滚throw的Exception异常的解决方法
<em>spring</em>事务中,throw的Exception异常事务不会<em>回滚</em>,原因是: 用 <em>spring</em> 事务管理器,由<em>spring</em>来负责数据库的打开,提交,<em>回滚</em>.默认遇到运行期例外(throw new RuntimeException("注释");)会<em>回滚</em>,即遇到不受检查(unchecked)的例外时<em>回滚</em>;而遇到需要捕获的例外(throw new Exception("注释");)不会<em>回滚</em>,即遇到受检查
spring事务在try catch时候的执行
<em>spring</em> 的默认事务机制,当出现unchecked异常时候<em>回滚</em>,checked异常的时候不会<em>回滚</em>; 异常中unchecked异常包括error和runtime异常,需要try catch或向上抛出的异常为checked异常比如IOException,也就是说程序抛出runtime异常的时候才会进行<em>回滚</em>,其他异常不<em>回滚</em>,可以配置设置所有异常<em>回滚</em>:  [html] view p
吐血求救,搞了一天没搞定,springmvc中@transactional回滚的问题
直接上代码了: Service层中的方法: @Transactional public boolean addShopUserCard(ShopUserCardDO shopUserCardDO){
当 Spring Transactional 遇上 try catch
      以下情况为单层 Transactional 事务     &amp;lt;bean id=&quot;txManager&quot; class=&quot;org.<em>spring</em>framework.jdbc.datasource.DataSourceTransactionManager&quot;&amp;gt; &amp;lt;property name=&quot;dataSource&quot; ref=&quot;mysqlDataSource&quot; /&amp;g
Spring事务超时、回滚的相关说明
事务超时: @Transactional(timeout = 60) 如果用这个注解描述一个方法的话,线程已经跑到方法里面,如果已经过去60秒了还没跑完这个方法并且线程在这个方法中的后面还有涉及到对数据库的增删改查操作时会报事务超时错误(会<em>回滚</em>)。如果已经过去60秒了还没跑完但是后面已经没有涉及到对数据库的增删改查操作,那么这时不会报事务超时错误(不会<em>回滚</em>)。 <em>回滚</em>: Spri
@Transactional注解回滚问题
@Transactional(rollbackFor=Exception.class) 这个的意思是指定<em>回滚</em>的异常,我直接就指定了Exception。也就是只要是Exception或者是Exception的子类,那么在此方法中,都会进行<em>回滚</em>。当然,还有notRollbackFor,这个是指定异常不<em>回滚</em>。 原文:https://blog.csdn.net/singgel/article/detail...
Spring整合MyBatis下@Transactional无效解决方案
场景复现Spring + MyBatis ,@Transactional不起作用
@Transactional事务回滚不生效,注解的继承
关于注解的继承 刚在群里有个人问怎么事务<em>回滚</em>不生效,然后截图一看,@Transactional打在接口上。这毫无疑问就是错误的根源,让他把@Transactional写在实现方法上就解决了。 众所周知,注解一般不能被继承。但是准确的说, 子类其实是可以继承父类的type注解的,如果需要继承父类的方法上的注解,就需要加一个@Inherited元注解。 关于元注解大家可通过 https://blog....
SpringCloud之利用事务Transactional,发生异常时进行回滚操作
场景,当业务逻辑比较多,搞不好某一个环节就会出现异常。这个时候就要进行异常<em>回滚</em>的包装了 代码: 在方法体上加上: @Transactional(rollbackFor = Exception.class) 在方法体内,写try catch捕捉。当抛异常时:  TransactionAspectSupport.currentTransactionStatus().setRollback...
@Transactional使用try->catch捕获异常并回滚方法
业务需求:需要捕获到@Transactional中的异常,并不影响事物<em>回滚</em> @Transactional(rollbackFor = Exception.class) public void test() { try { updata(); updata2(); } catch (Exception e) { ...
Spring下面的@Transactional注解标志的讲解
最近在开发中对Spring中的事务标记@Transactional用的比较多,今天上网收集了一些内容,做一个简单的总结~~~     在service类前加上@Transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。   Spring默认情况下会对运行期例外(RunTimeException)进行事务<em>回滚</em>。这个例外是unche
SpringMVC 中Transactional注解的巨坑
最近的一个项目中对数据库事务的处理要求比较严格。比如要完成业务A,需要完成操作1和操作2, 如果操作1失败,则业务A要整体<em>回滚</em>;如果操作2失败, 则仅需<em>回滚</em>操作2的数据,操作1的数据要留下来。因此整个业务算是两个事务。发现的问题以前并没有认真整理过代码的结构,这次要实现上述要求在事务标签的放置位置上遇到了一个奇怪的问题。业务我放在一个Manager中处理,操作可能放在Service层,或者有些也放在
记使用Junit单元测试事务无法回滚的问题(spring事务和断路器-Hystrix冲突)
在使用Junit的时间发现事务无法<em>回滚</em>,后来把Hystrix断路由删掉发现可以的,源码调式发现Hystrix和sqlsessionFactory使用的不是同一个contection,最后是将断路由的策略改成信号量(SEMAPHORE)解决的,目前没找到断路由线程池(THREAD)策略和Junit事务共存的办法。综合上述,配置改为如下即可解决:hystrix.command.default.exec...
Spring事务机制中@Transactional失效的原因
最近项目中发现<em>spring</em>事务机制中@Transactional会失效,一个方法<em>抛出异常</em>,但是数据库中修改的数据并不会<em>回滚</em>,于是看了一些资料,发现以下情况@Transactional事务会失效。 1.首先检查配置,在项目的<em>spring</em>配置文件检查是否配置开启事务 org.<em>spring</em>framework.jd
文章热词 Java spring cloud用户权限设计 Java spring cloud 部署方案 Java spring cloud前后端分离权限控制 Java spring cloud服务鉴权搭建 Java spring cloud服务鉴权agent配置
相关热词 bootstrap与spring c++抛出异常后继续执行 +spring bootstrap c++回滚 mysql 事务 python教程+chm python教程百家号
我们是很有底线的