关于AOP事务不回滚的问题

配置了事务,异常抛出为什么不回滚呢?
解决:

A.
先确认数据库类型,看表是否采用InnoDB,mysql只有InnoDB类型表才支持事务.
myiasm 是不支持事务的.

B.
看事务配置的相关dtd
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
发现有个
rollback-for 的配置.
后面找了下.发现默认情况下.
spring对checked Exception(比如Exception,IOException的子类)是不回滚事务的,对应RuntimeException回滚事务.所以这里要注意了.
增加rollback-for配置就ok了
rollback-for 可以配置多个异常以,号分隔.

<!-- 创建一个切面 -->
<tx:advice id="txAdvice" transaction-manager="TtransactionManager">
        <tx:attributes>
        <!-- 只要方法名 -->
        <tx:method name="add*" propagation="REQUIRED"
        isolation="DEFAULT" rollback-for="com.bstek.scm.common.exception.ManagerException,Exception"/>
        <tx:method name="delete*" propagation="REQUIRED"
        isolation="DEFAULT" />
        <tx:method name="update*" propagation="REQUIRED"
        isolation="DEFAULT" />
        <tx:method name="save*" propagation="REQUIRED"
        isolation="DEFAULT" />
        <tx:method name="insert*" propagation="REQUIRED"
        isolation="DEFAULT" />
        <tx:method name="*" propagation="SUPPORTS" read-only="true"
        isolation="DEFAULT" />
        </tx:attributes>
</tx:advice>

猜你喜欢

转载自fengbin2005.iteye.com/blog/1026792
今日推荐