java 事务用.xml配置的方式怎么设置两个报错都能回滚?

我知道用注解的方式是这么写的:
@Transactional(rollbackFor={RuntimeException.class, Exception.class})
那么用xml配置该怎么写呢?
图片描述
备注:这个CustomException继承自Exception

clipboard.png

TbProduct product = this.addProduct(dto, user);
if(1==1){
    throw new CustomException(9999,"test");
}

按照下方配置,如果程序运行期间报错,不会回滚(应该是CustomException是Exception的子类,但是回滚只回滚CustomException造成的,但是如果我rollback-for="Exception"又会有问题,上面的addProduct()不会回滚)

<tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!-- 传播行为 -->
            <tx:method name="*" rollback-for="com.mal.vo.CustomException" />
            <tx:method name="save*" propagation="REQUIRED" />
            <tx:method name="insert*" propagation="REQUIRED" />
            <tx:method name="add*" propagation="REQUIRED" />
            <tx:method name="create*" propagation="REQUIRED" />
            <tx:method name="delete*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <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>

阅读 1.7k
1 个回答

RuntimeException 是继承Exception类的。

//抛出Exception或Exception所有的子类异常都会回滚。
@Transactional(rollbackFor=Exception.class)

所以你的xml配置一个Exception类就可以了。

  <tx:method name="*" rollback-for="Exception"/>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题