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的事务控制了。不过问题是,数据还是回滚不了,继续找原因……
相关推荐
标题"spring_mybatis 整合jar包"指出我们要关注的是一个包含了整合Spring和MyBatis所需库的压缩文件。这通常包括Spring的核心库、Spring的数据库支持库、MyBatis的主库以及可能的其他依赖,如日志、数据库驱动等。这...
这个实例中的"mybatis整合spring实例(完整版)"文件可能包含了上述所有步骤的源代码,包括Spring的配置文件、MyBatis的配置文件、Mapper接口、XML文件以及相关的Java类。通过仔细阅读和理解这些代码,开发者可以...
这个整合项目是基于Spring 3.0.5、Spring MVC 3和MyBatis 3.0.2版本,采用注解方式进行配置,简化了XML配置文件,提高了开发效率。 Spring MVC是Spring框架的一部分,主要负责Web请求的处理。在本项目中,通过注解...
### MyBatis与Spring整合方式详解:基于注解的实现 #### 一、概述 在实际的软件开发过程中,为了更好地实现项目的模块化管理和提高代码的可维护性,通常会将MyBatis与Spring框架进行整合。这种方式不仅能够简化...
这些jar包包括但不限于:spring-context、spring-webmvc、mybatis、mybatis-spring等。 2. **配置Spring**:创建`applicationContext.xml`配置文件,定义Bean的实例和依赖关系。例如,定义DataSource、...
同时,Mybatis3也支持使用`@Transactional`注解进行局部事务控制,但通常在Spring环境中,全局事务管理由Spring负责。 在这个"spring3+struts2+Mybatis3"的实例中,你将学习如何集成这三个框架,创建一个完整的Java...
本文将深入探讨如何整合Spring MVC与MyBatis,以及如何在MyBatis中使用注解模式。 首先,Spring MVC是一个轻量级的Java Web框架,它提供了强大的模型处理、视图解析和控制器管理功能。而MyBatis则是一个持久层框架...
Spring 与 各框架的组各下来,版本就特别的多,针对简单的 使用注解来管理事务的,研究了两天,要不网上...说一下环境 Intellij Idea 15 + Maven + Spring 4.25 + Mybatis 3使用注解的方式,进行的事务回滚,欢迎测试。
在 MyBatis 和 Spring 整合的过程中,日志系统可以帮助开发者追踪问题,优化性能,尤其是在处理数据库操作时,日志记录显得尤为重要。 整合 MyBatis 和 Spring 的步骤通常包括以下几个关键部分: 1. **配置 Spring...
综上所述,"官方mybatis整合spring例子"涉及的内容包括MyBatis与Spring的集成方法、Bean管理、Mapper接口和XML配置、事务管理、AOP应用、注解使用、选择性使用JdbcTemplate、测试策略以及最佳实践和优化方案。...
在"Spring3+SpringMVC+MyBatis"的整合过程中,通常会使用Spring的ApplicationContext来加载配置,管理所有组件。SpringMVC的配置需要定义DispatcherServlet,配置视图解析器如InternalResourceViewResolver,以及...
将 MyBatis 整合到 Spring 中,可以充分利用 Spring 的管理能力,简化数据库操作,同时保留 MyBatis 的灵活性。 在整合 MyBatis 和 Spring 时,我们需要了解以下几个关键知识点: 1. **MyBatis-Spring 框架**:...
这个压缩包“Spring-SpringMVC-Mybatis整合所有jar包”包含了这三个框架整合所需的全部依赖,使得开发者能够快速搭建起一个功能完备的后端服务。 1. **Spring框架**:Spring是一个全面的开源应用框架,它提供了对...
此外,MyBatis-Spring还支持基于注解的事务管理,开发者可以通过在方法上添加@Transactional注解,实现细粒度的事务控制。这种方式更加灵活,也更符合Spring的编程风格。 在实际应用中,MyBatis-Spring的1.3.1版本...
MyBatis-Spring 整合是Java开发中一个常见的数据访问技术组合,它将MyBatis的灵活性与Spring的管理能力结合在一起,提供了一种高效、无缝的集成方式。这个整合包使得在Spring应用中使用MyBatis变得更加简单,无需...
标题中的"mybatis和spring整合jar包"表明我们要讨论的是如何将两个流行的Java框架——MyBatis和Spring——集成在一起,以便在同一个项目中利用它们各自的优势。MyBatis是一个轻量级的持久层框架,它允许开发者用SQL...
整合Spring和Mybatis的关键在于Spring的DataSource、TransactionManager和SqlSessionFactoryBean的配置。在Spring的配置文件中,我们需要定义数据源(DataSource),这是连接数据库的桥梁。接着,创建...
《mybatis-spring整合项目》是GitHub上官方提供的一个示例,它展示了如何将MyBatis和Spring框架完美地结合起来,实现数据访问层的高效管理。这个项目为开发者提供了一个清晰的模板,帮助他们理解并掌握这两个强大...
在Java开发领域,MyBatis和Spring框架的结合使用是常见的实践,它们的整合使得数据访问层的构建更为便捷和灵活。本篇文章将围绕"mybatis-spring-1.3.0.jar"这一组件展开,详细讲解其在实际项目中的作用、功能以及...
总结来说,Spring MVC与MyBatis的整合使得我们能够充分利用两者的优势:Spring MVC提供了强大的MVC架构和依赖注入,而MyBatis的注解模式则简化了SQL映射。通过这种方式,开发者可以更专注于业务逻辑,提高开发效率和...