关于AOP事务不回滚的问题
配置了事务,异常抛出为什么不回滚呢?
解决:
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>