不能與@Transactional應用層面做到這一點,但你可以:
變體1:延長@Transactional註解,並把它作爲的rollbackFor默認值。但設置的rollbackFor unchecked異常只是你需要。隨着這個你可以控制回滾僅供情況下,你肯定,並避免@Transactional的拷貝過去(的rollbackFor = MyCheckedException.class)
像:
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Transactional(rollbackFor=MyCheckedException.class)
public @interface TransactionalWithRollback {
}
並使用這個註解來代替標準的@Transactional。
變種2:你可以從AnnotationTransactionAttributeSource和覆蓋方法創建擴展determineTransactionAttribute:
protected TransactionAttribute determineTransactionAttribute(AnnotatedElement ae)
//Determine the transaction attribute for the given method or class.
TransactionAttribute看TransactionAttribute api,有一種方法
布爾rollbackOn(Throwable的前),我們應該推出回到特定的例外?
protected TransactionAttribute determineTransactionAttribute(
AnnotatedElement ae) {
return new DelegatingTransactionAttribute(target) {
@Override
public boolean rollbackOn(Throwable ex) {
return (check is exception type as you need for rollback);
}
};
}
第二種方法是不是你做的事務管理器它真的全球化,所以不如第一。更好地使用自定義註釋,因爲您可以控制它,只適用於您真正需要它的方法/類。但是,如果您在任何情況下都需要使用第二個變體,那麼這將是您的默認跨國行爲。
來源
2017-07-04 07:03:25
xyz
選中此「回滾」部分:http://www.dineshonjava.com/2012/12/declarative-transaction-management.html – Afridi