0 0

spring事务不生效5

遇到了一个spring配置事务不能生效的问题,在网上查了一下各种解决方案,但还是不能解决,不知道问题根源在哪里,请各位大神指点,非常感谢。
<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
	<property name="driver">
......
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
	<property name="dataSource">
		<ref bean="dataSource" />
	</property>
	<property name="packagesToScan">
		<list>
			<value>com.abc</value>
		</list>
	</property>
......
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
	<property name="sessionFactory" ref="mySessionFactory"></property>
</bean>

<bean id="transactionManager"
	class="org.springframework.orm.hibernate3.HibernateTransactionManager">
	<property name="sessionFactory">
		<ref local="mySessionFactory" />
	</property>
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
	<tx:attributes>
		<tx:method name="save*" />
		<tx:method name="*" read-only="true" propagation="REQUIRED" />
	</tx:attributes>
</tx:advice>

<aop:config>
	<aop:pointcut id="serviceMethod" expression="execution(* com.abc.*.service.*.*(..))" />
	<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" />
</aop:config>

不知道是不是配置的问题,代码采用的是springMVC+spring+hibernate的框架,采用的是注解方式,service和DAO中都使用过注解定义事务,仍然没有作用,数据操作采用的是getHibernateTemplate().save...。

问题补充:java.lang.RuntimeException: 测试    at com.abc.forum.service.impl.TopicServiceImpl.save(TopicServiceImpl.java:25)    at com.abc.forum.controller.TopicsController.addTopic(TopicsController.java:124)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    at java.lang.reflect.Method.invoke(Method.java:606)    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)    at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)

错误栈中都没有相关事务的类。
2014年7月07日 12:48

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

0 0

采纳的答案

事务生效的本质在于注解或者AOP的事务控制逻辑与代码中使用的逻辑在执行的过程中是否使用了相同的数据库连接&线程的控制,因此事务不能正确启用可能有如下几种原因:

1)事务逻辑控制与代码使用的是不同的数据源:比如注解配置的是transactionManagerA ==> A的数据源,代码里面从数据源B获取连接,这时事务是不会启用的;

2)使用了同一个数据源,但是使用的不是同一个连接:如使用了dataSource.getConnection直接获取连接,就不会启用事务,需要使用Spring-hibernate的框架提供的方式操作数据库;

3)线程问题:AOP控制与逻辑代码获取连接实际上是通过ThreadLocal的方式共享链接的,失去了这个条件(比如你的代码里面New thread了),也是不会共享连接的。

题主需要从Spring事务的原理出发,才能知道是为什么。

2014年7月07日 15:06
0 0

1、在save方法后面加上REQUIRED
2、在service实现类throw new RuntimeException()

2014年7月08日 12:35
0 0

检查数据库是否支持事务,如果用的是MySQL,默认不支持事务。

2014年7月07日 17:27
0 0

注解方式的事务不是这么配置的,<tx:annotation-driven transaction-manager="transactionManager"/>

2014年7月07日 17:14

相关推荐

    Spring事务不生效.pdf

    通过理解以上这些常见问题,开发者可以更好地预防和解决Spring事务不生效的问题,确保应用的事务处理正常运行,保持数据的一致性和完整性。在实际开发中,细心检查和配置事务管理,避免潜在的陷阱,是保证系统稳定性...

    Spring事务管理失效原因汇总

    描述部分进一步说明了事务失效的后果往往不明显,容易在测试环节被忽略,但在生产环境中出现问题,暴露了开发者对Spring事务机制不足够了解的问题。标签“Spring 事务 失效”直接概括了本文的知识点范围,即Spring...

    Spring中的AOP不生效

    ### Spring中的AOP不生效的原因及解决方法 在Java开发中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种重要的编程思想和技术手段,主要用于处理横切关注点问题,如日志记录、性能统计、安全控制、...

    请教:spring事务不起作用

    然而,在实际开发中,有时我们可能会遇到"Spring事务不起作用"的问题。这个问题可能是由多种原因引起的,包括但不限于配置错误、事务注解使用不当、事务传播行为理解有误等。下面我们将深入探讨这些可能的原因,并...

    Spring基于XML方式配置事务

    为了让事务通知生效,我们需要创建一个AOP代理。可以使用`&lt;aop:config&gt;`和`&lt;aop:advisor&gt;`标签来实现。`&lt;aop:advisor&gt;`中的`pointcut-ref`属性引用了匹配需要事务管理的方法的切点表达式。 5. **定义切点表达式**...

    spring事务总结.docx

    ### Spring事务管理详解 在Java应用开发中,事务管理是一个重要的环节,特别是在处理数据库操作时。Spring框架提供了强大的事务管理机制,使得开发者能够方便地控制事务的开启与提交。然而,在实际开发过程中,经常...

    spring事务-项目案例-PPT解读.zip

    spring事务_案例_PPT 一、事务传播机制的demo案例,内容包括: 1.业务代码列举7种事务传播机制的情况,...7.spring事务15种不生效的场景 8.事务的基本属性和常用的属性字段 三、压缩包有数据库和数据表,直接运行即可。

    Spring三种事务测试实现.zip

    Spring项目,数据库用mysql,整合Mybatis,需要自己创建数据库testinnodb,以及两张表Account,int id, int account,表Log,int id ,vchar log。三种事务,手动实现事务,利用AOP实现,以及声明式事务,lib中有所有...

    S详细讲解SH中Spring事务流程.doc

    在开发过程中,理解Spring事务管理的工作原理和配置方式至关重要,因为事务管理是保证数据完整性的基石,尤其在多线程和并发环境下,正确地管理事务对于防止数据不一致至关重要。通过合理的配置和使用,我们可以确保...

    java中高级面试题 java面试

    Java数据结构 拦截器与过滤器 MD5和Base64的区别 垃圾回收机制(GC) spring介绍 springBean的生命周期 悲观锁和乐观锁 mysql事务隔离级别 ...spring事务不生效的场景 spring事务隔离级别 MySQL事务隔离级别

    详细整理Spring事务失效的具体场景及解决方案.docx

    "Spring事务失效的具体场景及解决方案详细整理" 在实际项目开发中,为了保证业务数据的一致性,大家一般都会采用事务机制。但是,很多小伙伴可能只是简单了解一下,遇到事务失效的情况,便会无从下手。下面我们将...

    Spring事务相关问题解决方案

    知识点3: Spring事务的生效问题 在Spring框架中,事务的生效是通过cglib动态代理来实现的。如果事务方法与调用方法在同一个类中,事务将不生效。解决方法是将事务方法移到单独的类中。 知识点4: 事务测试的重要性 ...

    Spring+SpringMVC配置事务管理无效原因及解决办法详解

    在使用 Spring 和 SpringMVC 配置事务管理时,需要正确配置 Spring 和 SpringMVC 的配置文件,避免重复扫描,确保事务管理生效。本文详细介绍了 Spring+SpringMVC 配置事务管理无效原因及解决办法,希望对大家有所...

    跟我学Spring3(9.4)Spring的事务之声明式事

    首先,我们要了解Spring事务管理的两个主要模式:编程式事务管理和声明式事务管理。编程式事务管理通常通过PlatformTransactionManager接口实现,例如DataSourceTransactionManager,它需要在代码中显式调用begin、...

    spring3 struts2 Mybatis3 组件注解 事务注解 实例

    Spring的`&lt;tx:annotation-driven&gt;`标签启用注解驱动的事务管理,使`@Transactional`生效。Struts2的配置文件需要指定Action类及其结果映射,而Mybatis3的配置则包括数据源、SqlSessionFactory和Mapper扫描。 在业务...

    全面分析Spring的编程式事务管理与声明式事务管理.doc

    就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作过程中机器突然出故障的情况,此时,事务就必须确保出故障前对账户的操作不生效,就像用户刚才完全没有使用过取款机一样,以保证用户和银行的利益...

    springboot实现多数据源而且加上事务不会使aop切换数据源失效

    但需要注意的是,这种方式并不支持分布式事务,如果需要处理分布式事务,可能需要采用其他的解决方案,如两阶段提交、Saga模式或者分布式事务中间件,如Seata。 以上就是使用Spring Boot、MyBatis和AOP实现多数据源...

    狂神 Spring5课堂笔记

    - **事务管理**:Spring提供了对各种数据访问技术的统一事务管理机制,包括JDBC、Hibernate、JPA等,使得事务管理变得更加简单和一致。 #### 3. Spring框架的组成部分 根据提供的图表,Spring框架主要包括以下几个...

    SpringCloud Alibaba使用(四) - seata分布式事务.zip

    Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务 一个典型的分布式事务过程:分布式事务处理过程的-ID+三组件模型 Transaction ID XID :全局唯一的事务ID ...

    spring1.2申明式事务.txt

    为了使声明式事务生效,还需要配置一个`BeanNameAutoProxyCreator`,它会根据指定的bean名称为相应的bean创建事务代理: ```xml &lt;bean id="beanautoproxy" class="org.springframework.aop.framework.autoproxy....

Global site tag (gtag.js) - Google Analytics