0 0

Mybatis整合Spring3,事务注解为何不起作用?5

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:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
		p:location="/WEB-INF/jdbc.properties" />
		
	<!-- 数据源配置, 使用应用中的DBCP数据库连接池 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<!-- Connection Info -->
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.databaseurl}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />

		<!-- Connection Pooling Info -->
		<property name="maxActive" value="${dbcp.maxActive}" />
		<property name="maxIdle" value="${dbcp.maxIdle}" />
		<property name="defaultAutoCommit" value="false" />
		<!-- 连接Idle一个小时后超时 -->
		<property name="timeBetweenEvictionRunsMillis" value="3600000" />
		<property name="minEvictableIdleTimeMillis" value="3600000" />
	</bean>

	<!-- define the SqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="typeAliasesPackage" value="com.kimho" />
    </bean>

    <!-- scan for mappers and let them be autowired -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.kimho" />
    </bean>

	<!-- enable transaction demarcation with annotations-->
	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
	 
	<!-- transaction manager, use JtaTransactionManager for global tx-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
</beans>

[b]Service层通过注解@Transactional注入事务[/b]:

@Service
//默认将类中的所有函数纳入事务管理.
@Transactional
public class UserService{
	@Autowired
	private UserDao userDao;
	/**
	 * 获取主键id
	 * @return
	 */
	@Transactional(readOnly = true)
	public Long getId() {
		return userDao.getId();
	}
          
          /**
	 * 编辑用户
	 * @param user
	 * @param param
	 */
	public void updateUser(User user,Map<String,Object> param) {
		//编辑用户
		userDao.updateUser(user);
		//删除原有的用户角色关联
		userDao.deleteUserRole(param);
		String s = null;
		s.getBytes();
		//新增用户角色关联
		insertUserRole(param);
	}
         这里用来测试事务回滚
         ...
}

测试过几次updateUser的调用,事务就是不起作用的,后台log信息如下:

DEBUG 2011-09-04 16:19:46,672 org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl: JDBC Connection [org.apache.commons.dbcp.PoolableConnection@67aece] will not be managed by Spring

DEBUG 2011-09-04 16:19:46,672 org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl: SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@19006c9] was not registered for synchronization because synchronization is not active

DEBUG 2011-09-04 16:19:46,687 org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl: Committing JDBC Connection [org.apache.commons.dbcp.PoolableConnection@67aece]

DEBUG 2011-09-04 16:19:46,687 org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl: Closing no transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@19006c9]

DEBUG 2011-09-04 16:19:46,687 org.springframework.jdbc.datasource.DataSourceUtils: Returning JDBC Connection to DataSource


折腾了很长时间,一直都搞不定。

mybatis版本:3.0.6 spring版本:3.1M2

问题补充:
macrotea 写道
你好,会不会是漏了:
<context:component-scan base-package="com.mtea" />

导致没有把@Service 的类被spring托管.

没漏,在另一个spring的配置文件里面,已经配置了<context:component-scan base-package="com.kimho" />

问题补充:
kxys422834 写道
试试看把事务注解放在方法上能不能成功啊,如果成功了,在定位问题吧。

试过了,也不行

问题补充: 貌似找到了一篇文章,里面有提到事务失效的原因,晚上回去试下。
文章链接:http://blog.sina.com.cn/s/blog_5ddc071f0100uf7x.html

问题补充:<!-- 扫描业务组件,让spring不扫描带有@Service注解的类,防止事务失效 -->
<context:component-scan base-package="com.kimho">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
</context:component-scan>
springmvc配置改成这样,connection显示有spring的事务控制了。不过问题是,数据还是回滚不了,继续找原因……
2011年9月04日 16:32

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

0 0

在需要启用spring transaction的service 上加上 @EnableTransactionManagement 就行了,可以和 @Service 同时存在,不需要添加exclude-filter.

2016年10月24日 10:04
0 0

你好,你的问题找到原因了吗?我也遇到这样的问题。请赐教...

2012年12月28日 22:17
0 0

试试看把事务注解放在方法上能不能成功啊,如果成功了,在定位问题吧。

2011年9月05日 09:35
0 0

你好,会不会是漏了:
<context:component-scan base-package="com.mtea" />

导致没有把@Service 的类被spring托管.

2011年9月04日 18:56

相关推荐

    spring_mybatis 整合jar包

    标题"spring_mybatis 整合jar包"指出我们要关注的是一个包含了整合Spring和MyBatis所需库的压缩文件。这通常包括Spring的核心库、Spring的数据库支持库、MyBatis的主库以及可能的其他依赖,如日志、数据库驱动等。这...

    mybatis整合spring 实例

    这个实例中的"mybatis整合spring实例(完整版)"文件可能包含了上述所有步骤的源代码,包括Spring的配置文件、MyBatis的配置文件、Mapper接口、XML文件以及相关的Java类。通过仔细阅读和理解这些代码,开发者可以...

    springmvc3+spring+mybatis3整合项目 注解实现

    这个整合项目是基于Spring 3.0.5、Spring MVC 3和MyBatis 3.0.2版本,采用注解方式进行配置,简化了XML配置文件,提高了开发效率。 Spring MVC是Spring框架的一部分,主要负责Web请求的处理。在本项目中,通过注解...

    mybatis和spring整合方式-带注解

    ### MyBatis与Spring整合方式详解:基于注解的实现 #### 一、概述 在实际的软件开发过程中,为了更好地实现项目的模块化管理和提高代码的可维护性,通常会将MyBatis与Spring框架进行整合。这种方式不仅能够简化...

    mybatis与spring整合全部jar包

    这些jar包包括但不限于:spring-context、spring-webmvc、mybatis、mybatis-spring等。 2. **配置Spring**:创建`applicationContext.xml`配置文件,定义Bean的实例和依赖关系。例如,定义DataSource、...

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

    同时,Mybatis3也支持使用`@Transactional`注解进行局部事务控制,但通常在Spring环境中,全局事务管理由Spring负责。 在这个"spring3+struts2+Mybatis3"的实例中,你将学习如何集成这三个框架,创建一个完整的Java...

    Spring mvc 和 mybatis 整合、 mybatis使用注解模式

    本文将深入探讨如何整合Spring MVC与MyBatis,以及如何在MyBatis中使用注解模式。 首先,Spring MVC是一个轻量级的Java Web框架,它提供了强大的模型处理、视图解析和控制器管理功能。而MyBatis则是一个持久层框架...

    Spring 4 + Mybatis 3 注解事务

    Spring 与 各框架的组各下来,版本就特别的多,针对简单的 使用注解来管理事务的,研究了两天,要不网上...说一下环境 Intellij Idea 15 + Maven + Spring 4.25 + Mybatis 3使用注解的方式,进行的事务回滚,欢迎测试。

    mybatis整合spring的所需jar包

    在 MyBatis 和 Spring 整合的过程中,日志系统可以帮助开发者追踪问题,优化性能,尤其是在处理数据库操作时,日志记录显得尤为重要。 整合 MyBatis 和 Spring 的步骤通常包括以下几个关键部分: 1. **配置 Spring...

    官方mybatis整合spring例子

    综上所述,"官方mybatis整合spring例子"涉及的内容包括MyBatis与Spring的集成方法、Bean管理、Mapper接口和XML配置、事务管理、AOP应用、注解使用、选择性使用JdbcTemplate、测试策略以及最佳实践和优化方案。...

    Spring3+springmvc+mybatis三大整合

    在"Spring3+SpringMVC+MyBatis"的整合过程中,通常会使用Spring的ApplicationContext来加载配置,管理所有组件。SpringMVC的配置需要定义DispatcherServlet,配置视图解析器如InternalResourceViewResolver,以及...

    mybatis_spring.zip_mybatis整合spring的包

    将 MyBatis 整合到 Spring 中,可以充分利用 Spring 的管理能力,简化数据库操作,同时保留 MyBatis 的灵活性。 在整合 MyBatis 和 Spring 时,我们需要了解以下几个关键知识点: 1. **MyBatis-Spring 框架**:...

    Spring-SpringMVC-Mybatis整合所有jar包

    这个压缩包“Spring-SpringMVC-Mybatis整合所有jar包”包含了这三个框架整合所需的全部依赖,使得开发者能够快速搭建起一个功能完备的后端服务。 1. **Spring框架**:Spring是一个全面的开源应用框架,它提供了对...

    mybatis-spring-1.31.jar

    此外,MyBatis-Spring还支持基于注解的事务管理,开发者可以通过在方法上添加@Transactional注解,实现细粒度的事务控制。这种方式更加灵活,也更符合Spring的编程风格。 在实际应用中,MyBatis-Spring的1.3.1版本...

    mybatis-spring整合jar包

    MyBatis-Spring 整合是Java开发中一个常见的数据访问技术组合,它将MyBatis的灵活性与Spring的管理能力结合在一起,提供了一种高效、无缝的集成方式。这个整合包使得在Spring应用中使用MyBatis变得更加简单,无需...

    mybatis和spring整合jar包

    标题中的"mybatis和spring整合jar包"表明我们要讨论的是如何将两个流行的Java框架——MyBatis和Spring——集成在一起,以便在同一个项目中利用它们各自的优势。MyBatis是一个轻量级的持久层框架,它允许开发者用SQL...

    spring整合Mybatis

    整合Spring和Mybatis的关键在于Spring的DataSource、TransactionManager和SqlSessionFactoryBean的配置。在Spring的配置文件中,我们需要定义数据源(DataSource),这是连接数据库的桥梁。接着,创建...

    mybatis-spring整合项目

    《mybatis-spring整合项目》是GitHub上官方提供的一个示例,它展示了如何将MyBatis和Spring框架完美地结合起来,实现数据访问层的高效管理。这个项目为开发者提供了一个清晰的模板,帮助他们理解并掌握这两个强大...

    mybatis-spring-1.3.0.jar 下载

    在Java开发领域,MyBatis和Spring框架的结合使用是常见的实践,它们的整合使得数据访问层的构建更为便捷和灵活。本篇文章将围绕"mybatis-spring-1.3.0.jar"这一组件展开,详细讲解其在实际项目中的作用、功能以及...

    Spring mvc 和 mybatis 整合,mybatis使用注解模式

    总结来说,Spring MVC与MyBatis的整合使得我们能够充分利用两者的优势:Spring MVC提供了强大的MVC架构和依赖注入,而MyBatis的注解模式则简化了SQL映射。通过这种方式,开发者可以更专注于业务逻辑,提高开发效率和...

Global site tag (gtag.js) - Google Analytics