`

使用Spring2声明式事务过程中碰到了一个小意外

阅读更多
前些日子在开发一个项目的过程中,碰到了这样一个问题,现在拿出来于大家分享:
问题描述:
项目中我使用的是Spring2声明式事务,并将此事务作用于Service层(业务逻辑层)。
部分配置代码如下所示:
<!-- hibernate事务定义 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- 以AspectJ方式 定义 AOP, 如果service没有基于接口,使用cgilib来实现AOP,定义proxy-target-class="true" (3) -->
<aop:config proxy-target-class="true">
<aop:advisor pointcut="execution(* gos.business..*Service.*(..))" advice-ref="txAdvice"/>
</aop:config>

<!-- 基本事务定义,使用transactionManager作事务管理. -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>

如果你在service层的方法中使用try/catch块,那么有时问题出现了:
1.代码就算有异常,它也不会捕获。即不起作用。
2.事务不会回滚。

解决方案:
由于spring2做了将异常统一为DataAccessException的处理,所有你不需要在service层做任何的异常捕获动作,你只要在ACTION中使用try/catch块捕获相应的异常就OK了。


分享到:
评论

相关推荐

    Spring源代码解析(六):Spring声明式事务处理.doc

    Spring 中的事务处理可以分为两种方式:声明式事务处理和编程式事务处理。声明式事务处理通过 AOP 的实现,把事务管理代码作为方面封装到业务代码中,使得事务管理代码和业务代码解藕。这使得事务管理变得更加灵活...

    spring+mybatis的声明式事务

    在IT领域,尤其是在Java开发中,Spring框架与MyBatis框架的结合是常见的技术栈,它们在处理数据库操作时,事务管理是至关重要的一个环节。本文将深入探讨"spring+mybatis的声明式事务"这一主题,帮助你理解并掌握这...

    spring声明式事务配置

    根据提供的信息,我们可以深入探讨Spring框架中的声明式事务配置及其多种实现方式。声明式事务管理是一种简化事务管理的方式,它允许开发人员通过配置而非编程来指定事务边界,从而减少了代码的复杂性并提高了可维护...

    Spring声明式事务处理

    在Java中,通常使用JDBC的Connection对象来管理事务,但在Spring框架中,我们可以使用声明式事务处理来简化这一过程。 声明式事务处理的核心是基于AOP(面向切面编程)的,Spring通过在事务边界添加通知(advice)...

    使用Spring的声明式事务----AOP方式

    在Spring框架中,声明式事务管理是通过AOP(面向切面编程)实现的,它为开发者提供了方便、高效且灵活的事务管理机制。本文将深入探讨如何利用Spring的声明式事务来处理业务操作中的数据一致性问题,以及相关源码...

    Spring使用XML配置声明式事务

    这篇博文"Spring使用XML配置声明式事务"详细介绍了如何在Spring中使用XML配置来实现这一功能。 首先,我们需要了解Spring的核心组件之一——ApplicationContext,它是Spring容器的实例,负责管理和装配我们的bean。...

    spring声明式事务处理demo

    1. **配置Spring容器**:在Spring的配置文件(如`applicationContext.xml`)中,我们需要定义一个`&lt;tx:annotation-driven&gt;`元素,这将启用基于注解的声明式事务管理。同时,需要配置数据源(DataSource)和事务管理...

    spring编程式事务与声明式事务详解

    * TransactionDefinition.ISOLATION_REPEATABLE_READ:表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同 * TransactionDefinition.ISOLATION_SERIALIZABLE:所有的事务依次逐个执行,...

    使用Spring的声明式事务----Annotation注解方式

    在Spring框架中,声明式事务管理是其核心特性之一,它允许开发者无需手动处理事务的开始、提交、回滚等操作,而是通过配置或者注解的方式进行声明,从而简化了事务管理的复杂性。本篇文章将深入探讨如何使用Spring的...

    Spring 2.5整合iBATIS 2.3并使用Spring的声明式事务管理

    本篇将详细介绍如何在Spring 2.5版本中整合iBATIS 2.3,并利用Spring的声明式事务管理,以提升应用程序的稳定性和可维护性。 首先,我们需要了解Spring 2.5和iBATIS 2.3的基本概念。Spring 2.5是Spring框架的一个...

    Spring声明式事务

    spring声明式事务实例 可复制修改使用。。。。。。。。。。

    Spring声明式事务配置管理方法

    Spring声明式事务配置管理方法

    全面分析 Spring 的编程式事务管理及声明式事务管理

    本文将全面分析Spring中的编程式事务管理和声明式事务管理,旨在帮助开发者深入理解这两种事务管理方式,并在实际项目中合理选择。 **编程式事务管理** 编程式事务管理是通过代码直接控制事务的开始、提交、回滚等...

    spring声明式事务管理配置方式

    默认情况下,如果一个方法被@Transactional标记,那么该方法将在一个新的事务中运行,除非当前存在一个事务,此时它会加入到现有事务中。 3. **XML配置**: - 在传统的Spring配置中,你可以通过`...

    Spring 声明式事务和Spring 编程式事务

    Spring 声明式事务和Spring 编程式事务

    实验 spring 声明事务

    实验 "Spring 声明事务" 是 Java 高级编程中的一个重要环节,旨在让学生掌握 Spring 框架中声明式事务管理的配置和使用。在实际应用中,事务管理是确保数据一致性、完整性和可靠性的关键组件。Spring 提供了声明式...

    声明式事务控制spring+hibernate集成

    通过这个集成示例,开发者不仅可以了解如何将Spring的声明式事务管理与Hibernate的持久化能力结合,还能学习到如何组织和设计一个基于Spring的业务架构。这有助于提高代码的可维护性和可扩展性,降低系统复杂性,是...

    spring+ibatis声明式事务Demo_

    本示例“spring+ibatis声明式事务Demo”将探讨如何在Spring与iBatis集成环境中使用声明式事务管理。声明式事务管理允许开发者通过配置来控制事务,无需在代码中显式处理事务开始、提交和回滚。 **Spring框架** 是一...

    Spring Boot多数据源(支持Spring声明式事务切换和回滚).pdf

    - 引入了一个创新的特性,即在同一个事务内支持数据源的切换,并且兼容Spring的声明式事务管理。这意味着在事务中,可以按需在不同的数据源之间平滑切换,而无需担心事务一致性问题。 6. **多数据源事务回滚**: ...

Global site tag (gtag.js) - Google Analytics