Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 不要让事务回滚特定类型的RuntimeException_Spring_Spring Transactions_Runtimeexception - Fatal编程技术网

Spring 不要让事务回滚特定类型的RuntimeException

Spring 不要让事务回滚特定类型的RuntimeException,spring,spring-transactions,runtimeexception,Spring,Spring Transactions,Runtimeexception,嗨,有没有办法让spring事务在我抛出一种特殊的RuntimeException后不回滚 我有一个名为CustomException extends RuntimeException的类,我想在抛出它之前做一些事情。但是由于回滚,doSth()所做的任何事情都会回滚 doSth(); throw new CustomException(); 我可以通过将CustomException从一个RuntimeException扩展到另一个Exception来管理它,以便它成为一个选中的异常 但是,

嗨,有没有办法让spring事务在我抛出一种特殊的RuntimeException后不回滚

我有一个名为CustomException extends RuntimeException的类,我想在抛出它之前做一些事情。但是由于回滚,doSth()所做的任何事情都会回滚

doSth();
throw new CustomException();
我可以通过将CustomException从一个RuntimeException扩展到另一个Exception来管理它,以便它成为一个选中的异常


但是,在完成此操作之后,我必须将
抛出CustomException
添加到所有将调用此代码块的方法中。所以想知道是否有一种更优雅的方法

您应该使用@Transactional的norollboor属性

@Transactional(noRollbackFor = customException.class) 

doSth()是同一类的一部分吗?如果我正确理解了您的问题,那么更改为“从异常扩展”也将导致回滚是的,它属于同一类。通过扩展Exception并使其成为选中的异常,回滚将不再像我尝试的那样发生,因为spring only rollback RuntimeException默认情况下我相信这是正确的。最初,您从RuntimeException扩展而来,这使我认为在异常情况发生时需要回滚。如果在您的情况下,不需要回滚,但异常应该会回滚,那么Niraj Jha的解决方案应该可以工作。如果这不是您所需要的,您能相应地更新问题吗?您的意思是如果我从RuntimeException扩展,那么Niraj的方法将不起作用吗?然而,它对我起了作用。你能提供更多的解释吗?我真的不需要将异常传播回去,这就是为什么我希望通过使用Niraj的wayNiraj解决方案继续从RuntimeException扩展。我知道您的需求是对异常的回滚,只有来自doSth()的更改应该保持不变。这样,从一个RuntimeException更改为另一个Exception并仍然执行回滚也会导致doSth()无法持久化。我是在这一背景下发表评论的。希望这一点得到澄清。是的,我已经尝试过并成功了。我知道“Rollbackbor”的属性,应该想到这一点。谢谢@NirajWelcome,请不要忘记查看任何注释的所有属性,这非常有用。