`
wuhongjun
  • 浏览: 6839 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于Spring事务提交问题

阅读更多

       SPring和IBatis整合时,为什么我在业务层抛出异常,事务并没有回滚呢?

业务层代码如下:

package com.crm.service.impl;

import com.crm.service.UserService;
import com.crm.dao.UserDao;
import com.crm.po.User;

import java.util.List;
import java.sql.SQLException;

/**
 * UserService类
 * 创建者: 吴红军
 * 创建日期: 2009年04月10日
 * 创建时间:23时34分
 */
public class UserServiceImpl implements UserService<User>
{  //SPring注入j
    private UserDao userDao;

    public void setUserDao(UserDao userDao)
    {
        this.userDao = userDao;
    }

    public UserDao getUserDao()
    {
        return userDao;
    }

       //抛出异常
    public void delete(Integer id)throws SQLException
    {

            userDao.delete(id);
            throw new SQLException("有错误!");
    }

}

其中userDao是由Spring注入进来的,DAO用的是IBatis,其代码如下:

 

import com.crm.dao.UserDao;
import com.crm.po.User;

import java.util.List;
import java.sql.SQLException;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDao<User>
{
     public void update(User user)throws SQLException
    {
        getSqlMapClientTemplate().update("updateUser",user);
    }
}

Spring配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns:aop="http://www.springframework.org/schema/aop"
		xmlns:context="http://www.springframework.org/schema/context"
		xmlns:tx="http://www.springframework.org/schema/tx"
		xsi:schemaLocation="
			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
      
    <!-- 数据源 -->
     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
         <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
         <property name="url" value="jdbc:mysql://localhost:3306/crm"/>
         <property name="username" value="root"/>
         <property name="password" value="root"/>
     </bean>

    <!-- 事务管理器  -->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- 事务通知 -->
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="insert*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="*"  read-only="true"/>
        </tx:attributes>
    </tx:advice>

    <!-- 事务配置 -->
    <aop:config>
        <aop:pointcut id="txPointcut" expression="execution(* com.crm.service..*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
    </aop:config>

    <!-- 定义SqlMap工厂 -->
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation">
            <value>classpath:SqlMapConfig.xml</value>
        </property>
        <!-- -->
        <property name="dataSource" ref="dataSource"/>

    </bean>
    
    <!-- DAO业务类 -->
    <bean id="userDAO" class="com.crm.dao.impl.UserDaoImpl">
        
        <property name="sqlMapClient" ref="sqlMapClient"/>
    </bean>

    <!-- 业务类 -->
    <bean id="userService" class="com.crm.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDAO"/>
    </bean>
</beans>

当我调用业务逻辑层的delte方法时,事务并没有回滚掉?还是把数据库的数据给删掉了。

为什么事务不能回滚呢?这真是奇怪也?

 

分享到:
评论
2 楼 Frederic 2012-05-22  
你抛出的异常不是运行时异常,spring默认使用运行时异常进行回滚
1 楼 wangking717 2009-09-09  
我也遇到同样的问题:http://topic.csdn.net/u/20090908/19/c51c0df7-5e62-4f4f-9406-95963fc175da.html

相关推荐

    关于SpringMyBatis纯注解事务不能提交的问题分析与解决

    对于Oracle数据库而言,使用`BasicDataSource`能够提供更好的性能和稳定性支持,从而避免事务提交失败等问题的发生。此外,还需要注意事务管理器的正确配置,确保所有事务相关的组件都正确地引用了同一个数据源实例...

    Spring事务管理Demo

    Spring事务管理的目的是确保数据的一致性和完整性,尤其是在多操作、多资源的环境中。本Demo将深入探讨Spring如何实现事务的管理。 首先,Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 ...

    Spring事务流程图

    Spring事务管理是Spring框架的核心特性之一,主要用于处理应用程序中的数据一致性问题。在Spring中,事务管理分为编程式和声明式两种方式。本篇文章将详细解释Spring事务管理的流程,以及如何通过时序图来理解这一...

    spring事务与数据库操作

    ### Spring事务与数据库操作 #### 一、Spring的声明式事务管理 在现代软件开发中,事务处理是非常关键的一部分,特别是在涉及多个数据操作时。Spring框架提供了强大的事务管理能力,可以方便地集成到应用程序中。...

    Spring事务原理、Spring事务配置的五种方式

    Spring事务管理创造性的解决了很多以前要用重量级的应用服务器才能解决的事务问题,那么其实现原理一定很深奥吧?可是如果读者仔细研究了Spring事务管理的代码以后就会发现,事务管理其实也是如此简单的事情。这也...

    spring事务操作试验

    在Spring事务中,有几种常见的隔离级别可供选择,包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。每种隔离级别都有其特定的并发控制策略,...

    spring框架手动提交事务,jdbctample

    注意:只是jdbc自带的jdbctample,不能 用于整合mybatis框架的事务,我整合了,事务不起作用!!!! 按老师的说法是基于xml方式,但不准确,因为也用到了注解 &lt;aop:aspectj-autoproxy proxy-target-class="true"&gt;...

    Spring事务详细讲解

    Spring事务详细讲解 在 Spring 框架中,事务管理扮演着非常重要的角色。Spring 声明式事务让我们从复杂的事务处理中得到解脱,使得我们再也无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作。再也无需要...

    spring事务案例分析.zip

    7. **案例分析**:"SPRING事务管理案例分析.docx"很可能包含了具体的项目实例,详细讲解了如何在Spring项目中配置和使用事务管理,以及如何解决实践中遇到的问题。而"studyspring"可能是源代码目录,包含了实现这些...

    Spring事务管理开发必备jar包

    本资源包提供了进行Spring事务管理开发所需的所有关键库,包括框架基础、核心组件、AOP(面向切面编程)支持、日志处理、编译工具以及与数据库交互的相关jar包。下面将对这些知识点进行详细解释: 1. **Spring框架*...

    Spring事务小demo

    这个名为"Spring事务小demo"的项目提供了一个实践示例,帮助开发者了解Spring事务处理的基本概念和用法。 首先,Spring事务管理是Spring框架的核心特性之一,它允许我们以声明式或编程式的方式管理事务。声明式事务...

    Spring中事务的传播属性详解

    如果`methodB`的事务提交成功,但`methodA`的事务回滚,`methodB`的结果不会受到影响。 5. **PROPAGATION_NOT_SUPPORTED** `methodB`将以非事务方式执行。如果当前存在事务,那么`methodB`将导致该事务被挂起。这...

    Spring事务管理失效原因汇总

    标题“Spring事务管理失效原因汇总”指出了本文的核心内容是分析在使用Spring框架进行事务管理时可能遇到的问题及其原因。描述部分进一步说明了事务失效的后果往往不明显,容易在测试环节被忽略,但在生产环境中出现...

    spring 事务传播 demo

    Spring的事务管理器,如DataSourceTransactionManager或JtaTransactionManager,会根据这些配置来决定何时开始、提交、回滚事务,以及在需要时如何暂停和恢复事务。 在Java后端开发中,Spring的事务管理机制大大...

    Spring 事务简单完整例子

    本文将深入探讨在Spring框架中如何管理事务,以“Spring 事务简单完整例子”为出发点,结合标签“spring,事务,jdbc事务”,我们将详细解释Spring事务管理的原理和实践。 首先,Spring提供了两种事务管理方式:编程...

    spring学习事务源码

    2. **PlatformTransactionManager**: 这是Spring事务管理的顶级接口,提供了开始、提交、回滚事务的方法。根据底层数据源,如JDBC、Hibernate、JPA等,会有不同的实现,如DataSourceTransactionManager、...

    Spring事务管理的jar包

    本篇将深入探讨Spring事务管理的核心概念、工作原理以及如何使用`spring-tx-3.2.0.RELEASE.jar`这个jar包。 首先,我们需要理解什么是事务。在数据库系统中,事务是一组操作,这些操作被视为一个整体,要么全部完成...

    Spring自定义切面事务问题

    - 在Spring中,事务管理器本身也可以被看作是一种切面,它负责在合适的时候开启和提交事务。因此,当有多个切面需要被应用到同一个方法上时,切面的执行顺序就显得尤为重要。 - **通过`order`属性调整切面的...

Global site tag (gtag.js) - Google Analytics