关于AOP事务不回滚的问题

小树不倒我不倒 2011-05-03

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

解决:

A.

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

myiasm是不支持事务的.

B.

看事务配置的相关dtd

http://www.springframework.org/schema/tx/spring-tx-2.5.xsd

发现有个

rollback-for的配置.

后面找了下.发现默认情况下.

spring对checkedException(比如Exception,IOException的子类)是不回滚事务的,对应RuntimeException回滚事务.所以这里要注意了.

增加rollback-for配置就ok了

rollback-for可以配置多个异常以,号分隔.

<!--创建一个切面-->

<tx:adviceid="txAdvice"transaction-manager="TtransactionManager">

<tx:attributes>

<!--只要方法名-->

<tx:methodname="add*"propagation="REQUIRED"

isolation="DEFAULT"rollback-for="com.bstek.scm.common.exception.ManagerException,Exception"/>

<tx:methodname="delete*"propagation="REQUIRED"

isolation="DEFAULT"/>

<tx:methodname="update*"propagation="REQUIRED"

isolation="DEFAULT"/>

<tx:methodname="save*"propagation="REQUIRED"

isolation="DEFAULT"/>

<tx:methodname="insert*"propagation="REQUIRED"

isolation="DEFAULT"/>

<tx:methodname="*"propagation="SUPPORTS"read-only="true"

isolation="DEFAULT"/>

</tx:attributes>

</tx:advice>

相关推荐