文档章节

Spring MVC + Mybatis + Spring Aop声明式事务管理没有作用

陶邦仁
 陶邦仁
发布于 2016/01/03 15:32
字数 586
阅读 1135
收藏 12
点赞 1
评论 0

#1 问题描述# 在最近的一个项目中,采用springMVC、mybatis,发现一个很恼人的问题:事务管理不起作用!!网上查阅了大量的资料,尝试了各种解决办法,亦未能解决问题!

applicationContext.xml配置:

<context:annotation-config />
<!-- 引入jdbc属性配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties" />	
<!-- 数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
	<property name="driverClassName" value="${jdbc.driverClassName}"></property>
	<property name="url" value="${jdbc.url}"></property>
	<property name="username" value="${jdbc.username}"></property>
	<property name="password" value="${jdbc.password}"></property>
</bean> 
<bean id="ftpConfig" class="com.wtas.utils.CustomizedPropertyConfig">   
	<property name="location" value="classpath:ftp.properties" />
</bean>

<!-- 配置mybatis用到的sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="configLocation" value="classpath:mybatisConfig.xml" />
	<property name="dataSource" ref="dataSource" />
	<property name="typeAliasesPackage" value="com.wtas.study.domain,com.wtas.studygroup.domain,com.wtas.sys.domain,com.wtas.test.domain" />
	<property name="mapperLocations" value="classpath*:com/wtas/**/*Mapper.xml" />
</bean>
<!-- 根据映射文件动态生成dao的实现 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="basePackage" value="com.wtas" />
	<property name="annotationClass" value="org.springframework.stereotype.Repository" />
</bean>
<!-- 事务控制 -->
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:advice id="userTxAdvice" transaction-manager="transactionManager">
	<tx:attributes>
		<tx:method name="remove*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" no-rollback-for="java.lang.RuntimeException" />
		<tx:method name="delete*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" no-rollback-for="java.lang.RuntimeException" />
		<tx:method name="add*" propagation="REQUIRED" read-only="false"	rollback-for="java.lang.RuntimeException" />
		<tx:method name="insert*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.RuntimeException" />
		<tx:method name="save*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.RuntimeException" />
		<tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />
		<tx:method name="publish*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />
		<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
		<tx:method name="list*" propagation="SUPPORTS" read-only="true" />
		<tx:method name="query*" propagation="SUPPORTS" read-only="true" />
		<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
		<tx:method name="page*" propagation="SUPPORTS" read-only="true" />
	</tx:attributes>
</tx:advice>
<tx:annotation-driven transaction-manager="transactionManager"/>
	<!-- execution(public * com.wtas.*.service.*.*(..)) OR   execution(public * com.wtas.*.*.*.service.*.*(..))-->
<aop:config>
	<aop:pointcut id="pc" expression="execution(public * com.wtas.*.service.*.*(..))" />
	<aop:advisor pointcut-ref="pc" advice-ref="userTxAdvice" />
</aop:config>

springMVC.xml配置:

<!-- 这里注册转换器 -->
<mvc:annotation-driven conversion-service="conversionService" />
<context:component-scan base-package="com.wtas"></context:component-scan>
<mvc:default-servlet-handler />

<!-- 注册ConversionService -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
	<!-- 转换器 -->
	<property name="converters">
		<list>
			<bean class="com.wtas.converter.StringToDateConverter">
				<constructor-arg value="yyyy-MM-dd" />
			</bean>
		</list>
	</property>
</bean>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
	<property name="messageConverters">
		<list>
        		<bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter" />
			<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
			<bean class="org.springframework.http.converter.StringHttpMessageConverter" />
			<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
		</list>
	</property>
</bean>

<!-- 视图解释类 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/jsps/" />
	<property name="suffix" value=".jsp" />
	<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
</bean>

#2 排查过程# 具体原理,请参考:深入分析Spring与Spring MVC容器。 #3 解决问题# applicationContext.xml中添加:

<context:component-scan base-package="com.wtas">
	<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> 
</context:component-scan>

springMVC.xml中修改:

<!-- 扫描所有的controller 但是不扫描service-->  
<context:component-scan base-package="com.wtas">  
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />  
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />  
</context:component-scan>  

#4 总结问题# 具体总结,可参见http://my.oschina.net/xianggao/blog/522267#OSC_h1_4

© 著作权归作者所有

共有 人打赏支持
陶邦仁
粉丝 1569
博文 420
码字总数 1483822
作品 0
海淀
技术主管
spring,mybatis事务管理配置与@Transactional注解使用

概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。 Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型...

北京-卫斯理
2015/07/30
0
1
spring 声明事物

采用的基本搭建环境:SpringMVC、MyBatis、MySQL、tomcat Spring事务管理分解了传统的全局事务管理和本地事务管理的劣势,使得在任何环境中都可以使用统一的事务管理模型,你可以写一次代码,...

訫犫
2016/01/15
70
0
【step by step构建轻量级web框架】-何为轻量级web框架

本系列博文,将会一步一步介绍如何构建一个轻量级的web框架jbeer git地址:http://git.oschina.net/bieber/jbeer 在SSH/SSI充实着我们每个项目的开发过程中,我们所做的事情就是将他们一次组...

Bieber
2014/06/14
0
4
Spring编程式和声明式事务实例讲解

Java面试通关手册(Java学习指南):https://github.com/Snailclimb/JavaGuide 历史回顾: 可能是最漂亮的Spring事务管理详解 Spring事务管理 Spring支持两种方式的事务管理: 编程式事务管理...

snailclimb
05/23
0
0
【第1章 Spring概述与结构】1.2 Spring模块与结构

上一节:【第1章 Spring概述与结构】1.1 Spring起源与概述 基于Java Beans的配置管理,采用IOC的原理,特别是对依赖注入技术的使用。这些都用来减少各组件间对实施细则的相互依赖性。 一个核...

陶邦仁
2015/05/21
0
0
[转载]69道Spring面试题和答案

原文地址 http://ifeve.com/spring-interview-questions-and-answers/ 目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP) Spring MVC Spring 概......

王木东
2017/03/27
0
0
Spring编程式和声明式事务

1.编程式事务 1.1 编程式和声明式事务的区别 Spring提供了对编程式事务和声明式事务的支持,编程式事务允许用户在代码中精确定义事务的边界,而声明式事务(基于AOP)有助于用户将操作与事务...

梨加橙
06/19
0
0
分析 Spring 的编程式事务管理及声明式事务管理(转)

开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务。通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之。 先决条件...

君辰
2015/07/27
0
0
Spring 2.0 的AOP介绍及其通知类型

Spring 2.0的AOP 在Spring 2.0中最激动人心的增强之一是关于Spring AOP,它变得更加便于使用而且更加强大,主要是通过复杂而成熟的AspectJ语言的支持功能来实现,而同时保留纯的基于代理的J...

小星星程序员
2014/08/15
0
0
Spring AOP 对Spring MVC的Controller切面拦截不起作用

当使用Spring AOP对Controller层的Controller类的方法进行切面拦截,不起作用。AOP配置没有任何问题。 Spring AOP配置没有任何问题;【正常】 断点调试:Spring源码断点调试,在调用Control...

陶邦仁
2015/11/02
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Android 复制和粘贴功能

做了一回搬运工,原文地址:https://blog.csdn.net/kennethyo/article/details/76602765 Android 复制和粘贴功能,需要调用系统服务ClipboardManager来实现。 ClipboardManager mClipboardM...

她叫我小渝
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
6
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1
fiddler安装和基本使用以及代理设置

项目需求 由于开发过程中客户端和服务器数据交互非常频繁,有时候服务端需要知道客户端调用接口传了哪些参数过来,这个时候就需要一个工具可以监听这些接口请求参数,已经接口的响应的数据,这种...

银装素裹
今天
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
今天
0
0
虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
昨天
1
0
There is no session with id[xxx]

参考网页 https://blog.csdn.net/caimengyuan/article/details/52526765 报错 2018-07-19 23:04:35,330 [http-nio-1008-exec-8] DEBUG [org.apache.shiro.web.servlet.SimpleCookie] - Found......

karma123
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部