您的位置:首页 > 编程语言 > Java开发

spring mvc + mybatis事务不起作用

2012-04-26 11:17 549 查看
用spring aop配置了事务,但是不起作用,困扰了好久。

事务配置如下:

<!-- 配置事务管理器,使用jdbc事务 -->

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource" />

</bean>

<!-- 申明式事务 -->

<tx:advice id="txAdvice" transaction-manager="transactionManager">

<tx:attributes>

<tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>

<tx:method name="*" read-only="true"/>

</tx:attributes>

</tx:advice>

<aop:config>

<aop:pointcut id="allManagerMethod" expression="execution(* com.xiu.xclk.web.service.*.*(..))" />

<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod" />

</aop:config>

查网上,有的说是因为spring mvc自动扫描的时候,把包括@service的注解一下都扫描今天了,所以在开始的时候要先排除掉对@service注解的扫描,见帖子:http://www.linuxso.com/architecture/14904.html

配置好之后,事务还是不起作用,很奇怪,之后查找,一个帖子给了很大的启发:http://hi.baidu.com/jakoes/blog/item/7256efc2c7ec30190ff477dc.html,说是Spring的事务实现采用基于AOP的拦截器来实现,如果没有在事务配置的时候注明回滚的checked
exception,我的代码中抛的是java.lang.Exception,改成抛RuntimeException,事务起作用了。帖子中说两种办法可以解决:

1,在事务属性后面加上需要回滚的checked exception。比如<prop
key="save*">PROPAGATION_REQUIRED,-XXXXException</prop>(注意那个"-",对应的是"+")

2, 不改配置文件,将需要事务回滚的异常继承自unchecked exception类,也就是RuntimeException。
那么对于第二种方法,我的是起作用了,但是第一种方法我的是声明了对Exception回滚了啊。后来一想,是不是要写全java类名啊,于是改成:

<tx:method name="save*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>,这样就起作用了。看来还是自己大意了,spring的配置文件要写全类名的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: