默认spring只在发生未被捕获的runtimeexcetpion时才回滚。
最笨的办法:代码级控制:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
为何在aop advitor中配置rollba-for=“java.lang.Exception”异常时不回滚呢?
待续,这个问题必须解决
问题已解决:
原理:spring aop 异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚,默认情况下aop只捕获runtimeexception的异常,但可以通过 换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new runtimeexcetpion(),这样程序异常时才能被aop捕获进而回滚
解决方案: 方案1.例如service层处理事务,那么service中的方法中不做异常捕获,或者在catch语句中最后增加throw new RuntimeException()语句,以便让aop捕获异常再去回滚,并且在service上层(webservice客户端,view层action)要继续捕获这个异常并处理 方案2.在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常(现在项目的做法)
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <aop:config> |
- 浏览: 501279 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (241)
- Jscript笔记 (23)
- sql (8)
- jQuery (23)
- css (2)
- jQuery.form (2)
- struts2 (3)
- 数据库字符集 (3)
- Java (15)
- Oracle (2)
- DB2 (4)
- ResourceBundle (1)
- Exception (7)
- Windows (2)
- 数据库 (18)
- JSP (2)
- jstree (3)
- datatable (9)
- bootstrap-switch (1)
- select2 (3)
- Java.tree (1)
- JSF2 (1)
- Bootstrap (1)
- Eclipse (13)
- SVN (3)
- Eclipse插件 (5)
- myeclipse (1)
- ajax (1)
- JBOSS (2)
- data storage (1)
- Apache tiles (1)
- springMVC (15)
- mybatis (6)
- AngularJS (13)
- checkbox (1)
- J2EE (1)
- SecureCRT (7)
- tomcat (4)
- Maven (3)
- log4j (3)
- Xshell (1)
- 工具应用 (5)
- spring (12)
- Apache (5)
- books (1)
- fastjson (1)
- Standard (1)
- Mysql (1)
- MAC (1)
- Charles (1)
- LINUX (1)
- 日常开发ISSUE (0)
最新评论
-
yuchangcheng:
直接把代码 上传上来吧 这样看的很吃力呀
mybatis generator 的复合查询 -
zzd0058:
我表示报400错误
SpringMVC接收复杂集合参数 -
lihaiming:
影非弦 写道没有这个页面详细的文件么?文档地址:https:/ ...
select2.js使用 -
影非弦:
没有这个页面详细的文件么?
select2.js使用 -
影非弦:
这个select.min.css是select2提供的样式文件 ...
select2.js使用
发表评论
-
一个spring mvc + mybatis项目里的一些问题
2016-04-27 13:57 13081. mybatis sql 映射配置文件里的sql ... -
SpringMVC接收复杂集合参数
2016-04-25 22:48 21298spring MVC在接收集合请求参数时,需要在Cont ... -
Get,Post请求中文乱码问题有效解决方法
2016-04-19 21:32 2007对于做Java WEB项目同学来说,中文乱码问题是一个经常遇 ... -
统一处理视图数据格式
2016-04-18 15:37 1165<mvc:annotation-driven con ... -
Spring MVC @ResponseBody注解返回响应流时中文乱码问题的解决
2016-04-15 15:17 1047在Spring MVC 的Controller中使用@Re ... -
如何通过spring mvc接收页面表单List
2016-04-13 13:53 2425可以用2种方式解决这个问题: 1.在表单提交之前,把表单序 ... -
springmvc多文件上传
2016-04-13 13:20 532@RequestMapping(value = " ... -
spring中自定义注解(annotation)与AOP中获取注解
2016-01-22 16:46 14176一、自定义注解(annotation) 自定义注解的作用: ... -
Spring中的AOP(五)——在Advice方法中获取目标方法的参数
2016-01-22 16:33 1272摘要 本文介绍使用Spring AOP编程中,在增强处理 ... -
Spring中事务传播行为种类
2016-01-22 15:06 720Spring在TransactionDefinition接口 ... -
配置分离
2016-01-21 15:55 948为了配合运维管理,同时也为了提高代码的可维护性,将一些配置相 ... -
声明式事务管理 - Spring Framework reference 2.0.5 参考手册中文版
2016-01-20 17:50 10519.5. 声明式事务管理 大多数Spring用户 ... -
Spring事务管理只对出现运行期异常进行回滚
2016-01-20 16:49 1109Spring的事务管理默认只对出现运行期异常(java. ... -
在SpringMVC中使用@RequestBody注解处理json时,报出HTTP Status 415的解决方案
2016-01-19 12:16 3923Spring的@RequestBody非常牛 ... -
Spring mvc 原理浅析
2016-01-12 18:20 4481Spring MVC主要包括以下要点: 1:由Di ... -
Spring事务传播特性的浅析——事务方法嵌套调用的迷茫
2016-01-11 18:31 1124Spring事务传播机制回顾 Spring事务一个被讹 ... -
关于Spring事务回滚的问题
2016-01-11 18:11 834在Spring的配置文件中,如果数据源的defaultAu ... -
通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
2015-12-08 13:14 2593关于在spring 容器初始化 bean 和销毁前所做的操 ... -
spring+springMVC,声明式事务失效,原因以及解决办法
2015-10-29 21:27 1177一.声明式事务配置: [html] view p ... -
springMVC 文件下载
2015-10-29 20:29 1467package com.clj.test.down.uti ...
相关推荐
其中,Callable 接口的 call 方法可以抛出异常,而 Runnable 接口的 run 方法不能抛出异常。因此,如果我们想捕获子线程的执行结果或异常,就应该使用 Callable 接口。 二、线程池的使用 在 Java 中,我们可以使用...
4. 异常处理:为了触发事务回滚,方法内通常会抛出未检查异常(继承自`RuntimeException`的异常)或显式指定需要回滚的检查异常。Spring默认只在遇到未检查异常时自动回滚事务,如果需要在特定检查异常下回滚,可以...
Spring 异常捕获且回滚事务解决方案 在 Spring 框架中,异常捕获和回滚事务是非常重要的概念。今天,我们将讨论如何在 Spring 中捕获异常并回滚事务。 首先,让我们了解一下 Spring 的事务机制。当我们在 Spring ...
在这个例子中,虽然捕获到了异常并记录了日志,但由于没有重新抛出异常,Spring 的 AOP 代理无法感知到异常,因此事务不会回滚。 然而,当我们在异常处理中加入重新抛出异常的操作,如 `throw new RuntimeException...
然而,如果`methodB`的异常没有被捕获并重新抛出,而是被忽略或者处理了,那么Spring可能无法检测到这个异常,从而不会回滚`methodA`的事务。因此,捕获并重新抛出异常是至关重要的,如示例代码所示。 此外,需要...
如果在`try`块中抛出了需要回滚的异常,即使在`catch`块中没有再次抛出,事务仍会被回滚,因为Spring是在方法级别管理事务,而非`try-catch`块。 七、总结 `@Transactional`注解简化了Java开发中的事务管理,使得...
在这种情况下,子事务异常情况下,主事务捕获了子事务的异常却仍发生了回滚。从代码来看,回滚的原因在于,子事务失败的时候在回滚代码中设置了全局回滚的标识(AbstractPlatformTransactionManager.processRollback...
如果方法中抛出了未被捕获的异常,Spring会自动回滚事务;反之,如果方法正常结束,事务会被提交。 在Spring中,事务回滚规则基于异常类型。默认情况下,只有未检查异常(RuntimeException及其子类)会导致事务回滚...
例如,将异常捕获后未重新抛出unchecked异常,导致事务回滚的条件不成立。 5. 事务传播行为配置错误。比如,在需要REQUIRES_NEW传播行为的情况下配置了REQUIRED。 为了确保事务管理的有效性,开发者应该理解并正确...
在这个例子中,`createUser`方法被标记为事务性的,如果在方法内部抛出未捕获的异常,Spring会自动回滚事务,确保数据一致性。 Spring事务管理的工作流程大致如下: 1. **AOP代理**:Spring使用AOP(面向切面编程)...
- 默认情况下,只有在未捕获的`RuntimeException`或`Error`抛出时,Spring才会回滚事务。对于受检查的异常(即继承自`Exception`而非`RuntimeException`的异常),事务不会自动回滚。 - 如果希望在抛出特定受检查...
Spring默认会在出现未捕获的运行时异常时回滚事务。通过`rollbackFor`和`noRollbackFor`属性,我们可以自定义哪些异常应触发回滚,哪些异常不应触发回滚。 ### 5. 性能考虑 虽然基于注解的事务管理简化了开发,但...
浅谈Spring中@Transactional事务回滚及示例 @Transactional是Spring Framework中的一种事务管理机制,用于管理数据库事务。它可以使得数据库操作更加安全和可靠。本文将详细介绍@Transactional的使用场景、checked...
这种方法通常在捕获到异常后并且不重新抛出时使用,以确保事务不会因为方法的“成功”执行而提交。 5. **异常处理与事务回滚**: 在`try-catch`块中,如果捕获到一个`RuntimeException`但没有重新抛出,Spring将...
1. **未被捕获的异常**:如果事务中的代码抛出了未被捕获的异常,Spring将自动回滚事务。 2. **显式回滚**:开发者可以在事务代码中显式调用`TransactionStatus.setRollbackOnly()`方法来强制回滚事务。 3. **特定...
- NEVER:不允许存在事务,如果当前存在事务,抛出异常。 - NESTED:如果当前存在事务,则创建一个嵌套事务;否则行为同REQUIRED。 理解并熟练掌握Spring声明式事务处理是每个Spring开发者必备的技能。正确地配置...
Spring事务的回滚规则默认是基于异常的,即只有当方法抛出未捕获的运行时异常时,事务才会回滚。如果捕获了这些异常,事务就不会回滚。例如: ```java @Service public class UserService { @Transactional ...
因此,即使在子事务中抛出并捕获了异常,只要不重新抛出,事务还是会继续执行。 4. **嵌套事务的深度**:理论上,你可以无限嵌套事务,但实际应用中应避免过深的嵌套,因为它可能导致性能问题,并增加代码的复杂性...
在自定义异常时,需要让自定义的异常继承自RuntimeException,这样抛出的时候才会被Spring默认的事务处理准确处理。 Java事务回滚失败问题分析需要注意检查型异常和非检查型异常的区别,并采取相应的处理方法,使用...
当发生未捕获的运行时异常或特定的检查异常(由@Transactional注解的rollbackFor属性指定)时,Spring会自动回滚事务。对于未列出的异常,Spring不会自动回滚。 六、异常传播与事务 在声明式事务管理中,如果@...