自己测试
@Override
public void addBanner(Banner banner) throws Exception {
Backlog backlog = new Backlog();
backlog.setContent("|||||||||||||||||||||||||||");
backlogMapper.insert(backlog);//插入一条
bannerMapper.insert(banner);//又插入一条
throw new Exception("111");//报个错
}
配置不起作用
原因在于:
springAOP默认只针对于运行时异常进行回滚,也就是说Exception的子类RuntimeException才会回滚.此时抛的是基类,自然就不回滚了.那么如果抛自定义异常呢?
在sping 配置文件里
<!-- 事务管理器 -->
<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="java.lang.Exception"/>
<tx:method name="insert*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="create*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
<tx:method name="select*" propagation="SUPPORTS" read-only="true" />
<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>
在传播行为里面后面的加上rollback-for所有异常就行了.