0 0

关于spring事务BeanNameAutoProxyCreator配置的问题5

我的事务配置如下
<!--事务-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
<bean  id="autoProxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>*Service</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<!--事务结束-->

然后在SysMenuServiceImpl里面有方法
public void addMenus()throws Exception{
SysMenu m1 = new SysMenu();
m1.setMenuName("cccccc");
m1.setStatus(true);
m1.setParentId(new BigDecimal(1));
SysMenu m2 = new SysMenu();
m2.setMenuName("测试测试测试测试测试测试");
m2.setStatus(true);
m2.setAccessUrl("");
try{
genericDao.save(m1);
genericDao.save(m2);//有异常的
}catch(Exception e){
throw new Exception(e);  
}
}


然后控制器调用
try{
sysMenuService.addMenus();
//sysMenuServiceImpl.addMenus();
}catch(Exception e){e.printStackTrace();}


在保存m2的时候会出现异常,我希望的结果是将m1的数据回滚
而实际上,出现异常时m1的数据还是会保存到数据库。

这事务难道配置错了吗?

问题补充:我的数据库使用的是Oracle10g 所以表类型是支持的
关于Service的注解,肯定没问题,方法都能调用了。
异常我的dao跟Service全部都抛出去了,并没有自己处理
所有异常统一放在控制器处理。

问题补充:补充下,我的Service跟Dao都是用注解方式注入的,下午我将注解方式换成配置文件注入的方式, <!-- 配置Service -->  
    <bean id="sysMenuService" class="com.xxx.framework.service.impl.SysMenuServiceImpl">  
        <property name="sysMenuDao" ref="sysMenuDao" />  
   </bean> 
     <!-- 配置dao-->  
   <bean id="sysMenuDao" class="com.xxx.framework.dao.impl.SysMenuDaoImpl">  
        <property name="sessionFactory" ref="sessionFactory" />  
   </bean>
这样配置后,代码里面就是增加了相应的get跟set方法,事务就能回滚了。
难道是注解方式不支持这样的事务配置吗?
项目一定得用注解的,该怎么配置事务呢
2012年11月08日 11:19

4个答案 按时间排序 按投票排序

0 0

1:spring 是完全可以声明式事务的。
2:如果你使用spring mvc的话。可以这样applicationContext.xml中<context:component-scan base-package="com" >
<context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
</context:component-scan>
[servlet-name]-servlet.xml中
<context:component-scan base-package="com" use-default-filters="false" >
<context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
</context:component-scan>

2012年11月26日 09:50
0 0

刚没注意看:
1。你配置文件中
<prop key="save*">PROPAGATION_REQUIRED,-Exception</prop> 标明了save*的方法将被事务管理 而你的方法是 addMenus()。。。
2.你 dao 中要有 @Transactional

2012年11月08日 16:49
0 0

@Transactional Service方法中有这个 @Transactional?

2012年11月08日 16:09
0 0

事物不回滚就那么几个原因:
1.0 表类型不支持 (mysql innodB 可以)
2.0 扫描或者注解的类 不对!(没在扫描范围内)
3.0 不能自己处理异常,需要抛出来 异常类型也要注意

2012年11月08日 12:34

相关推荐

    spring 事务代理配置

    ### Spring事务管理——声明式事务配置详解 #### 引言 在现代的Java企业级应用开发中,事务处理是确保数据一致性和完整性的重要机制。Spring框架提供了强大的事务管理功能,支持编程式和声明式两种事务管理方式。...

    spring 事务(6中配置完全降解)

    本篇文章将详细解析Spring中的六种事务配置方法,帮助开发者深入理解并掌握Spring事务的运用。 1. **基于XML的事务配置** Spring支持通过XML配置来管理事务,这是最基础的配置方式。在`spring`的配置文件中,我们...

    Spring_Hibernate使用TransactionInterceptor声明式事务配置.doc

    Spring_Hibernate使用TransactionInterceptor声明式事务配置 在这篇文章中,我们将探讨使用Spring_Hibernate框架实现声明式事务配置的方法,具体来说,就是使用TransactionInterceptor来管理事务。在Spring框架中,...

    Spring + Hibernate + Struts 事务配置小例子(带提示框等小技巧)

    前几天搞 Spring + Hibernate + Struts 事务配置 ,网上找了好多资料,不过好无语,大多都是 Ctrl + V,浪费俺的宝贵时间 现在我总结配出一套,给大家参考参考,可能有不足,请大家多多交流。 附:内有弹出...

    AOP usage -- BeanNameAutoProxyCreator usage

    在Spring配置文件中,我们需要声明一个`BeanNameAutoProxyCreator` bean,并设置其属性。主要的属性有: 1. `proxyTargetClass`: 是否使用CGLIB代理,默认为false,如果设为true,将使用CGLIB生成子类代理;若设为...

    spring1.2申明式事务.txt

    根据提供的文件信息,本文将详细解析Spring 1.2中声明式事务管理的相关知识点,包括其配置方式、工作原理以及如何在实际应用中实施。 ### Spring 1.2声明式事务简介 Spring框架中的声明式事务管理是通过AOP(面向...

    Spring在Transaction事务传播行为种类

    ### Spring中的Transaction事务传播行为种类详解 #### 一、引言 在开发基于Spring框架的应用程序时,事务管理是确保数据一致性的重要手段之一。Spring框架提供了丰富的事务管理功能,其中包括了事务传播行为...

    Spring声明式事务和@Aspect的拦截顺序问题的解决

    Spring 声明式事务和 @Aspect 的拦截顺序问题的解决 Spring 框架中,声明式事务和 @Aspect 都可以用于实现Aspect-Oriented Programming(面向方面编程),但是它们的拦截顺序问题往往会导致很多问题。本文将详细...

    Spring实现自动代理Demo

    在Spring的XML配置文件中,我们需要声明一个`BeanNameAutoProxyCreator` bean,并设置其属性。例如: ```xml &lt;bean id="proxyCreator" class="org.springframework.aop.framework.autoproxy....

    Spring.3.x企业应用开发实战(完整版).part2

    10.3.1 Spring事务传播机制回顾 10.3.2 相互嵌套的服务方法 10.4 多线程的困惑 10.4.1 Spring通过单实例化Bean简化多线程问题 10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的...

    spring-note

    ### Spring 框架概述及核心特性 #### 第一章 Spring 简介 ...- **对比**:Spring 的事务管理更为灵活和强大,支持多种事务传播行为、隔离级别等。 #### 第六章 框架整合 ##### 一、SSH - **SSH**...

    Spring-Reference_zh_CN(Spring中文参考手册)

    2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. JPA 2.4.3. 异步的JMS 2.4.4. JDBC 2.5. Web层 2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. 动态语言...

    spring配置文件

    通过以上配置,我们能够有效地在Spring环境中实现AOP,特别是针对事务管理这一场景的应用。这种方式不仅能够帮助我们更好地组织代码,还能提高程序的可维护性和可扩展性。同时,利用Spring框架的强大功能,我们能够...

    struts spring hibernate完整环境配置

    本程序是struts spring hibernate的完整环境配置, 包括: struts1.3 spring 2.0 hibernate 3.1 的所有完整的包。 BeanNameAutoProxyCreator事务处理 中文乱码解决 MD5程序加密 AJAX验证码等 ...

    Spring3.x企业应用开发实战(完整版) part1

    10.3.1 Spring事务传播机制回顾 10.3.2 相互嵌套的服务方法 10.4 多线程的困惑 10.4.1 Spring通过单实例化Bean简化多线程问题 10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的...

    事物管理配置文件.txt

    描述:本篇详细解析了在SSH(Struts+Spring+Hibernate)框架整合过程中,Spring配置事务管理的具体实现方法。通过深入分析XML配置文件中的bean定义,我们将逐步理解如何通过Spring来管理和控制事务,以及如何集成...

    struts spring hibernate完整环境配置4/4

    本程序是struts spring hibernate的完整环境配置, 包括: struts1.3 spring 2.0 hibernate 3.1 的所有完整的包。 BeanNameAutoProxyCreator事务处理 中文乱码解决 MD5程序加密 AJAX验证码等 ...

    struts spring hibernate完整环境配置3/4

    本程序是struts spring hibernate的完整环境配置, 包括: struts1.3 spring 2.0 hibernate 3.1 的所有完整的包。 BeanNameAutoProxyCreator事务处理 中文乱码解决 MD5程序加密 AJAX验证码等 ...

Global site tag (gtag.js) - Google Analytics