首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

关于AOP事务不回滚的有关问题

2012-09-04 
关于AOP事务不回滚的问题配置了事务,异常抛出为什么不回滚呢?解决:A.先确认数据库类型,看表是否采用InnoDB

关于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>

热点排行