最近项目里老是报一个错误,Transaction was marked for rollback only; cannot commit,一开始觉得没头没脑的但肯定和事物有关,没一会又莫名其妙的好了,没有报错了,就没放在心上,后来再其他位置又重现了这个错误,所以在这里记录一下!
这个错字面意思很明显了,事务准备提交的时候发现已经被标记为仅回滚就无法提交,从而报错
看到比较多的解释是:在一个service方法中调用了另一个service方法,其中调用的第二个方法发生异常,标记为rollbackOnly,就算在第一个service中catch后还是会报异常。或者其他状况下程序报错后将事务标记为仅回滚,继续执行,最后持久化时,因为事务的标记而报错主要是坑在它这样报错之后,我们不知道具体是哪个位置报错的,以及报错的真实原因。
问题出在这里
当报错之后这时事务状态已经改变了,但是程序在继续执行,直到最后才报一个最外层rollback only的错误
如果在出错后将错误进一步向上抛出,这个时候,就能看到具体报错的原因了
下一篇 >>>>> 记录RabbitMq创建交换机时发现的问题
That’s it;
时光清浅处,一步一安然。