1、具体问题 这段代码是A嵌套B,B嵌套C,遇到的bug是C代码发生异常进行事务标记(因为使用的传播行为是默认的REQUIRED所以要等A事务进行rollback,C加入了A事务只能暂时进行标记),但是由于B代码进行了异常捕获返回给了A信息并没有抛出异常,导致A代码并没有进行rollback。 2、解决办法 在A代码退款失败处直接抛出异常而且必须是RuntimeExcetion,普通Exception不会进行回滚