`
lzg406
  • 浏览: 61037 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring中exception

阅读更多

在目前使用的现有框架当中,利用springAOP机制来控制事务处理是目前最流行的一种控制事务的方式。

但是我们在某种使用场合的过程中,为什么有时事务处理老是不起作用呢?这里,为您道出原因之一,

首先请看一段话

Spring的事务实现采用基于AOP的拦截器来实现,如果没有在事务配置的时候注明回滚的checked exception,那么只有在发生了unchecked exception的时候,才会进行事务回滚。

有必要先解释一下checked exceptionunchecked exception

先看看EXCEPTIONJDK文档当中的结构

java.lang.Object
  继承者 java.lang.Throwable
      继承者 java.lang.Exception
          继承者 java.lang.RuntimeException
 
Unchecked exception: 这类异常都是RuntimeException的子类,虽然RuntimeException同样也是Exception的子类,但是它们是特殊的。Exception是作为checked Exception 出现的。
所以,除了ErrorRuntimeException,其他剩下的异常都是你需要关心的,而这些异常类统称为Checked Exception
 

有了以上的基础,看看我们框架当中的事务属性

<property name="transactionAttributes">

                     <props>

                            <prop key="get*">PROPAGATION_REQUIRED,readOnly </prop>

                            <prop key="save*">PROPAGATION_REQUIRED </prop>

                            <prop key="delete*">PROPAGATION_REQUIRED</prop>

                            <prop key="update*">PROPAGATION_REQUIRED </prop>

                     </props>

 

</property>

 

此处,我们没有指定任何异常,那么它目前默认处理的就是unchecked exception了,再结合我们自身每个项目的模块,在我们的每个项目当中几乎都定义了自己的异常,这些异常都是继承自Exception,很不幸的是,我们继承的Exception包括自己定义的异常,都是checked exception

 

所以,在我们的事务处理机制当中,事务不管用了。

解决办法有2个:

1,在事务属性后面加上需要回滚的checked exception。比如<prop key="save*">PROPAGATION_REQUIRED,-XXXXException</prop>(注意那个"-",对应的是"+")

2, 不改配置文件,将需要事务回滚的异常继承自unchecked exception类,也就是RuntimeException

(nighthawk)

感谢:http://www.blogjava.net/nighthawk/archive/2007/07/09/128974.html

分享到:
评论

相关推荐

    spring_exception异常处理

    好多项目都有容错机制 后台服务器报错后 不是讲错误信息直接发给用户 而是发送一个其他页面 你在上网的时候应该遇到过后台出错了 用户看到的页面是一个小孩在哭 提示页面找不到什么的

    spring boot exception handler.zip

    在实际项目中,处理异常是必不可少的一部分,Spring Boot为此提供了强大的异常处理机制。本篇将深入探讨Spring Boot的异常处理器,帮助你更好地理解和运用。 1. **Spring Boot异常处理基础** Spring Boot默认提供...

    logback filter,tree component,spring exception resolver

    本话题主要围绕Logback的过滤器(Filter)、组件(Component)以及Spring异常处理器(Exception Resolver)进行深入探讨。 1. **Logback过滤器(Filter)**: Logback允许我们通过过滤器来控制哪些日志事件会被...

    spring2.5.6示例 imagedb

    这个实例可能用来演示如何在Spring 2.5.6中配置、管理和操作数据库,特别是与图像数据相关的操作。由于提及了“oracle-schema.txt”,我们可以推断这个示例可能使用Oracle数据库,并且“oracle-schema.txt”文件包含...

    4.Spring中的JdbcTemplate,Spring中的的事务,

    ### Spring中的JdbcTemplate #### JdbcTemplate概述 JdbcTemplate是Spring框架提供的一种用于简化JDBC编程的对象。通过封装原生的JDBC API,JdbcTemplate不仅提高了代码的可读性和可维护性,还帮助开发者避免了...

    Spring表达式语言中文参考手册.docx

    - **错误处理**:在解析或评估过程中可能出现 `ParseException` 和 `EvaluationException` 异常。 #### 八、结论 Spring SpEL 提供了一种强大且灵活的方式来处理运行时数据和对象图。通过理解其核心概念和组件,...

    spring事务与数据库操作

    在客户管理系统中,为了实现对所有DAO类中以`save`开头的方法进行权限验证,可以使用Spring AOP的注解方式来实现。 ##### 2.3 实现步骤 1. **引入相关Jar包**:首先需要引入Spring AOP所需的Jar包,包括Spring的...

    spring_springweb_

    6. **异常处理(Exception Handling)**:当安全规则不满足时,Spring Security会抛出相应的异常,你可以自定义这些异常的处理逻辑。 7. **表达式语言(Expression Language)**:Spring Security提供了一个强大的...

    spring-rest-exception-handler, 一个方便的RESTful api Spring MVC 异常.zip

    spring-rest-exception-handler, 一个方便的RESTful api Spring MVC 异常 spring REST异常处理程序 这个项目的目的是为for提供一个方便的异常处理程序( 解析器),它满足了错误响应的最佳实践。 处理自定义异常。...

    spring3中增加 spring security控制权限

    在Spring框架中,Spring Security是一个强大的安全访问控制组件,它为Web应用提供了全面的安全管理解决方案。本篇文章将深入探讨如何在Spring 3中整合Spring Security来实现权限控制,以保护你的应用程序免受非法...

    spring-boot-assistant-222.17.2

    《Spring Boot Assistant插件在IntelliJ IDEA中的应用与实践》 在当今的软件开发领域,Spring Boot框架因其简洁、高效的特点,深受开发者喜爱。为了提高开发效率,IntelliJ IDEA,作为一款强大的Java集成开发环境,...

    spring与hibernate的整合

    这里我们关注后者,通过 Spring 注入 SessionFactory 到 DAO 类中,然后在业务方法中打开和关闭 Session,处理事务。例如: ```java public class DepartmentDapImpl implements IDepartmentDao { private ...

    Spring-Boot1.52 SpringSecurity4 Spring Data Jpa 整合例子

    首先,在项目的 `pom.xml` 文件中添加 Spring Boot、Spring Security 和 Spring Data JPA 的依赖。例如: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-data-jpa &lt;groupId&gt;org...

    spring cloud2.0 eureka server spring security配置

    在Spring Cloud 2.0版本中,Eureka Server的配置相比1.x版本确实有了一些显著的变化,尤其是在结合Spring Security进行安全设置时。Spring Cloud Eureka是Netflix Eureka的Spring Boot实现,它为微服务架构提供了...

    狂神spring-security静态资源.zip

    这个"狂神spring-security静态资源.zip"文件很可能包含了Spring Security的相关教程、代码示例或配置文件,帮助用户理解和学习如何在Spring应用中实现安全控制。下面我们将深入探讨Spring Security的核心概念、功能...

    org.springframework.transaction-3.1.2.RELEASE.zip

    nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'transactionManagerBeanName' of bean class [org.springframework.transaction.interceptor....

    Spring Boot集成Spring Security的Demo

    首先,集成Spring Security到Spring Boot项目中,你需要在`build.gradle`或`pom.xml`文件中添加相应的依赖。对于Maven项目,可以在`pom.xml`中添加如下依赖: ```xml &lt;groupId&gt;org.springframework.boot ...

    spring security 3 demos

    5. **异常处理(Exception Handling)**:Spring Security 自带了一套完整的异常处理机制,包括未授权和未认证的异常。通过自定义`AccessDeniedHandler`和`AuthenticationEntryPoint`,你可以控制用户在访问受限资源...

    spring-exception-handling:用于 Spring Data Rest 项目中自定义异常处理的 PoC

    压缩包中的`spring-exception-handling-master`很可能包含了以下组件: - `src/main/java`: 包含自定义异常处理器的Java源代码。 - `src/main/resources`: 可能包含了配置文件,如`application.properties`,用于...

    quartz 在spring中使用服务定时执行的例子

    首先,集成Quartz到Spring项目中,我们需要在项目的`pom.xml`或`build.gradle`文件中添加Quartz和Spring相关的依赖。Quartz的核心库通常包括`quartz`和`quartz-jobs`两个JAR包,确保它们在项目类路径下可用。 接...

Global site tag (gtag.js) - Google Analytics