不能与@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