Spring 事务如何指定不回滚的异常?
在 Spring 中,事务默认对所有的 RuntimeException
和 Error
进行回滚。但是,你可以通过 @Transactional
注解的 noRollbackFor
和 noRollbackForClassName
属性来指定不需要回滚的异常。
- noRollbackFor:用于指定不需要回滚的异常类。例如:
““java
@Transactional(noRollbackFor = {CustomException.class})
public void someMethod() {
// …
}“`
在这个例子中,如果 <code>someMethod</code> 方法抛出的是 <code>CustomException</code>,那么事务就不会回滚。</p></li>
<li><p><strong>noRollbackForClassName</strong>:用于指定不需要回滚的异常类名。例如:““java
@Transactional(noRollbackForClassName = {“CustomException”})
public void someMethod() {
// …
}“`
在这个例子中,如果
someMethod
方法抛出的是CustomException
,那么事务就不会回滚。
相反,如果你想指定哪些异常需要回滚,你可以使用 rollbackFor
和 rollbackForClassName
属性。这些属性的使用方式和 noRollbackFor
、noRollbackForClassName
相同,只是它们是用来指定需要回滚的异常。
需要注意的是,如果你同时指定了需要回滚的异常和不需要回滚的异常,那么需要回滚的异常设置将会被忽略。