`
flashdream8
  • 浏览: 680425 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring MyBatis 事务配置不回滚

 
阅读更多

spring  和 mybatis 项目配置的事务 不回滚

研究了一下有以下几个原因:

1. mysql(我用的mysql) 表的 引擎 不是 InnoDB (因为InnoDB是支持事务的) 

2. 抛出的异常 是 Exception不是 RuntimeException 因为 spring 的异常默认是检查(unhandled Exception)

3. 配置的方法是否正确:

    下面是我的一个配置,留下来以便查询

 

<!-- transaction manager, use JtaTransactionManager for global tx -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>

	<!-- enable component scanning (beware that this does not enable mapper 
		scanning!) -->
	<context:component-scan base-package="com.auto"/> 
	
	<!-- enable autowire -->
	<context:annotation-config />

	<!-- enable transaction demarcation with annotations -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<!-- the transactional semantics... -->
		<tx:attributes>
			<!-- all methods starting with 'get' are read-only -->
			<tx:method name="get*"  read-only="true"/>
			<tx:method name="find*" read-only="true"/>
			<tx:method name="list*" read-only="true"/>
			<tx:method name="*" rollback-for="Exception"/>
		</tx:attributes>
	</tx:advice>
	<!-- ensure that the above transactional advice runs for any execution of 
		an operation defined by the FooService interface -->
	<aop:config proxy-target-class="true">
		<aop:pointcut id="fooServiceOperation"
			expression="execution(* com.auto.service..*.*(..))" />
		<aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation" />
	</aop:config>

 

 

------------------------------------------------------------------

 

下面是 看到别的可能 我没有经过验证 贴出来 有时间验证一下:

 

配置文件的问题吧? 
1.root-context.xml 
<!-- 不扫描带有@Controller注解的类。因为这些类已经随容器启动时,在servlet-context中扫描过一遍了 --> 
<context:component-scan base-package="com.kimho"> 
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 
</context:component-scan> 

2、servlet-context.xml: 
<!-- 扫描业务组件,让spring不扫描带有@Service注解的类(留在root-context.xml中扫描@Service注解的类),防止事务失效 --> 
<context:component-scan base-package="com.kimho"> 
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/> 
</context:component-scan> 

 

 

 

 

Spring MVC启动时的配置文件,包含组件扫描、url映射以及设置freemarker参数,让spring不扫描带有@Service注解的类。为什么要这样设置?因为servlet-context.xml与service-context.xml不是同时加载,如果不进行这样的设置,那么,spring就会将所有带@Service注解的类都扫描到容器中,等到加载service-context.xml的时候,会因为容器已经存在Service类,使得cglib将不对Service进行代理,直接导致的结果就是在service-context中的事务配置不起作用,发生异常时,无法对数据进行回滚。 

 

 

 

分享到:
评论

相关推荐

    Spring/SpringMVC/MyBatis整合+事务回滚

    在"Spring/SpringMVC/MyBatis整合+事务回滚"的主题中,我们将深入探讨如何将这三个框架整合起来,并实现事务的回滚功能。 首先,Spring框架是核心,它提供了依赖注入(DI)和面向切面编程(AOP)的能力,使得代码更...

    spring与mybatis整合实现事务配置

    4. **事务配置**:在Spring中,事务管理有两种方式:编程式事务管理和声明式事务管理。通常我们采用声明式事务管理,通过`&lt;tx:annotation-driven&gt;`标签启用基于注解的事务管理。事务的传播行为、隔离级别、超时时间...

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

    ### 关于Spring MyBatis纯注解事务不能提交的问题分析与解决 #### 问题背景 在使用Spring结合MyBatis框架进行开发时,有时会遇到事务管理方面的问题,特别是当项目采用纯注解的方式配置事务时,可能会出现事务无法...

    《spring+mybatis 企业应用实战》源码、类库全资料

    1. **配置文件**:包括Spring的bean配置文件(如`applicationContext.xml`)和MyBatis的配置文件(如`mybatis-config.xml`),它们定义了数据源、事务管理器、SqlSessionFactory以及Mapper接口的扫描路径。...

    spring+mybatis的声明式事务

    MyBatis本身并不提供事务管理,但在Spring环境下,MyBatis的SqlSession会自动被Spring事务管理器控制。当事务开始后,所有的SqlSession操作(如insert、update、delete)都会被包含在这个事务中,直到事务结束。 6...

    spring_mybatis_spring-mybatis_

    - **事务控制**:Spring自动管理事务,例如在Service层方法中,一旦发生异常,Spring会回滚事务。 7. **最佳实践**: - 使用MyBatis的动态SQL功能,提高SQL的可读性和可维护性。 - 将复杂的业务逻辑放在Service...

    Spring 4 + Mybatis 3 注解事务

    Spring 与 各框架的组各下来,版本就特别的多,针对简单的 使用注解来管理事务的,研究了两天,要不网上写的不清楚,要不版本都很旧了,所以就是不回滚,Spring 的配置太灵活了,在加上新手,根本就不可能明白Spring...

    SpringBoot-Mybatis处理事务

    在SpringBoot框架中整合Mybatis进行事务管理是常见的开发实践,这主要涉及到Spring的声明式事务管理和Mybatis的事务配置。下面将详细讲解这个主题。 首先,SpringBoot简化了Spring的配置,使得开发者可以快速搭建...

    spring+mybatis+事务

    关于事务管理,Spring提供了一种声明式事务管理方式,允许开发者在不直接接触事务API的情况下,通过配置来控制事务的边界。在Spring中,我们可以使用@Transactional注解来标记需要进行事务管理的方法,一旦发生异常...

    SpringMyBatis - 学生返校系统

    例如,在学生返校申请过程中,如果涉及到多个表的操作,一旦出现异常,Spring会自动回滚所有未提交的事务,防止数据状态的不一致。 总结来说,SpringMyBatis在“学生返校系统”中扮演了关键角色,提供了强大的数据...

    spring mybatis-3.2.8.jar

    - **事务管理**:Spring提供声明式事务管理,只需在Service层的方法上添加@Transactional注解,即可实现事务的自动提交、回滚等操作。 4. **使用EasyUI**: EasyUI是一个基于jQuery的UI组件库,用于快速构建美观...

    SpringMyBatis - 采购管理系统

    SpringMyBatis是Java开发中常见的轻量级框架集成,它结合了Spring的IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)特性,以及MyBatis的持久层优势,为开发人员提供了...

    spring+Mybatis模板

    声明式事务管理更简洁,只需在 Service 类上添加 @Transactional 注解,Spring 就会自动处理事务的开启、提交、回滚。 8. **测试**:编写单元测试或集成测试,验证 Spring MVC 和 MyBatis 的配置是否正确,确保...

    Spring-Mybatis整合

    Spring 和 Mybatis 是两个在...通过上述内容,我们可以看到Spring-Mybatis整合涉及到的核心知识点,包括框架的引入、配置、接口设计、事务管理和测试等多个方面。理解并掌握这些知识点,对于进行Java Web开发至关重要。

    spring mybatis atomikos 多库分布式事务demo

    在IT行业中,分布式事务是大型系统中不可或...接着,配置Spring的事务管理器,声明Atomikos作为全局事务管理器,并指定相应的事务属性,如超时时间、回滚规则等。在applicationContext.xml或对应的配置类中: ```xml ...

    Spring与MyBatis整合源码

    通过`PlatformTransactionManager`配置,Spring能够控制事务的提交和回滚,实现声明式事务管理。 - **使用@Autowired注入Mapper**:在需要使用数据库操作的地方,可以使用Spring的@Autowired注解来注入对应的Mapper...

    java Spring mybatis基础相关思维导图

    7. **事务管理图**:解释Spring如何处理事务开始、提交、回滚的时机。 这些思维导图对于初学者来说是非常有用的,它们以图形化的方式帮助理解复杂的概念,使得学习过程更加直观和高效。通过深入研究这些图,你可以...

    maven-spring-mybatis

    在描述中提到的事务回滚,通常指的是声明式事务管理,通过在方法上添加@Transactional注解,由Spring自动进行事务的开启、提交或回滚。 6. **XML配置**:在Spring和MyBatis的整合中,通常会使用XML配置文件来定义...

    spring+mybatis整合包

    - Spring的事务管理:通过配置@Transactional注解或在XML中声明事务边界,实现事务的自动提交和回滚。 5. 应用场景:Spring+MyBatis的整合方案广泛应用于复杂的企业级应用,特别是在数据处理量大、业务逻辑复杂的...

    SpringBatch+Spring+Mybatis+MySql (spring batch 使用jar)

    Spring Batch可以提供大量的,可重复的数据处理功能,包括日志记录/跟踪,事务管理,作业处理统计工作重新启动、跳过,和资源管理等重要功能。 业务方案: 1、批处理定期提交。 2、并行批处理:并行处理工作。 3、...

Global site tag (gtag.js) - Google Analytics