spring3.1.1和mybatis3.1.1下的事务不起作用

IT_小翼 发布于 2012/09/20 17:24
阅读 2K+
收藏 1

项目是用Spring3.1.1和mybatis3.1.1搭的。项目计划用注解的方法配置事务,可是怎么调试都不起作,后来改成配置文件的方式也不起作用。下面是配置的一些信息,大侠们帮看看,问题出在哪里了!!

这是applicationContext.xml里的配置内容。

<!-- 采用注释的方式配置bean -->
 <context:annotation-config />
 <!-- 配置要扫描的包 -->
 <context:component-scan base-package="com.luyou.platform" />

 <!--proxy-target-class="true"强制使用cglib代理   如果为false则spring会自动选择-->
 <aop:aspectj-autoproxy proxy-target-class="true" />

 <!-- 数据库配置文件位置 -->
 <context:property-placeholder location="classpath:jdbc.properties" />

 <!-- Remove this if your database setting is fine.-->
 <!-- 配置dbcp数据源 -->
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <property name="driverClassName" value="${jdbc.driverClassName}" />
  <property name="url" value="${jdbc.url}" />
  <property name="username" value="${jdbc.username}" />
  <property name="password" value="${jdbc.password}" />
  <!-- 队列中的最小等待数 -->
  <property name="minIdle" value="${jdbc.minIdle}"></property>
  <!-- 队列中的最大等待数 -->
  <property name="maxIdle" value="${jdbc.maxIdle}"></property>
  <!-- 最长等待时间,单位毫秒 -->
  <property name="maxWait" value="${jdbc.maxWait}"></property>
  <!-- 最大活跃数 -->
  <property name="maxActive" value="${jdbc.maxActive}"></property>
  <property name="initialSize" value="${jdbc.initialSize}"></property>
 </bean>

 <!-- Transaction manager for a single JDBC DataSource -->
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource" />
  <qualifier value = "sendMail" />
 </bean>

 <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
 
 <!-- 配置mybatis -->
 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="mapperLocations" value="classpath*:sqlmapper/*.xml" />
  <property name="dataSource" ref="dataSource" />
 </bean>

 <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
 </bean>
 
 <import resource="classpath:email-dependences-web.xml"/>

事务边界的类

@Service
@Transactional(value = "sendMail", propagation = Propagation.REQUIRED)
public class AddressInfoServiceImpl implements AddressInfoService {

……

以下是问题补充:

@IT_小翼:参考下面方法配置也不起作用。 http://www.oschina.net/question/54100_39115 (2012/09/20 17:27)
加载中
0
IT_小翼
IT_小翼
这个问题已经解决了。看看这里: http://my.oschina.net/xuqiang/blog/97633
0
JFinal
JFinal
是mysql 数据库吗? 检查一下是否是 InnoDB 引擎,mysql 的 MyISAM 引擎不支持事务 
IT_小翼
IT_小翼
@JFinal 试了很多种配置了,还是不行。有这方面的例子吗?谢谢!!
JFinal
JFinal
@许子青 可能是 spring 的配置问题
IT_小翼
IT_小翼
是MySQL,也是InnoDB引擎。
0
Ken5233
Ken5233
aop 的空间声明貌似没看到
IT_小翼
IT_小翼
用AOP配置也不起作用。用注解同样不起作用!
0
hzajie
hzajie
我感觉应该是你的spring与mybits之间的关系没有正确建立.
hzajie
hzajie
@hzajie 你检查一下,如果spring和mybatis采用的数据源是同一个,则你的问题就不是这个问题了.
IT_小翼
IT_小翼
@hzajie 那Spring与Mybatis怎么联合起来做事务管理呢?能详细些吧,谢谢!!
hzajie
hzajie
@许子青 你的连接是通过mybatis,但事务又是通过spring控制,你知道其实事务控制与连接直接相关.
IT_小翼
IT_小翼
@hzajie 嗯,考虑到了,可是怎么就有关了呢?不是把事务交给Spring管理了吗?
hzajie
hzajie
@许子青 你的事务如果按你的配置来看,根本与mybits无关,请考虑.
下一页
0
郑彬
郑彬
好像我的也是不支持,DEMO已经很简单了,就是无法实现异常情况下回滚。
IT_小翼
IT_小翼
估计不配置的问题,我再没有调试,等我调试好了发正确解决方法。。。
0
t
threejin
01 1.root-context.xml
02 <!-- 不扫描带有@Controller注解的类。因为这些类已经随容器启动时,在servlet-context中扫描过一遍了 -->
03 <context:component-scanbase-package="com.kimho">
04 <context:exclude-filtertype="annotation"expression="org.springframework.stereotype.Controller"/>
05 </context:component-scan>
06
07 2、servlet-context.xml:
08 <!-- 扫描业务组件,让spring不扫描带有@Service注解的类(留在root-context.xml中扫描@Service注解的类),防止事务失效 -->
09 <context:component-scanbase-package="com.kimho">
10 <context:exclude-filtertype="annotation"expression="org.springframework.stereotype.Service"/>
11 </context:component-scan>
0
小李广
小李广

把aop的配置移动 就好用了?

返回顶部
顶部