如何从 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class) 中排除特定异常?

Bha*_*hah 2 java jpa transactions rollback spring-boot

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
public void abc()
{
 try{
  //some Code
  }
  catch(DataIntegrityViolationException ex)
  {
   //some Code
  }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,如何从回滚此事务中排除 DataIntegrityViolationException?

sta*_*r67 5

你应该使用noRollbackFor属性。例子:

@Transactional(noRollbackFor = DataIntegrityViolationException.class)
Run Code Online (Sandbox Code Playgroud)

默认情况下@Transactional仅适用于RuntimeExceptions 和Errors,但不适用于已检查的异常。

因此,如果您确实想为除异常之外的每个异常回滚事务,您还DataIntegrityViolationException应该指定属性:rollbackFor

@Transactional(rollbackFor = Throwable.class, noRollbackFor = DataIntegrityViolationException.class)
Run Code Online (Sandbox Code Playgroud)