java – Spring @Transactional Annotation属性优先级/继承
|
在调用方法本身是transactionnal的情况下,当REQUIRED传播时,如果它们不同,当前方法是否会覆盖封闭的事务属性(例如rollbackFor)? 插图: Class A {
@Transactional(propagation = Propagation.REQUIRED,rollbackFor = { SomeException.class})
void foo() {
try {
b.bar();
} catch (OtherException e) {
// is the transaction marked as rollback-only at this point ?
}
}
}
Class B {
@Transactional(propagation = Propagation.REQUIRED,rollbackFor = { OtherException.class})
void bar() {
[...]
}
}
编辑: 好吧,我想避免琐碎的超出范围的答案,所以让我们清楚,我知道弹簧传播处理. 如果您不是,下面是文档的相关部分,我只想澄清有关上面示例的第一部分:
我的问题可以改写为: 逻辑事务范围是否包含事务属性? 解决方法所以,我设置了一个测试用例,简短的回答是肯定的.事务逻辑范围包含事务属性,其边界确实是带注释的方法属性. 因此,即使两个方法的底层物理事务都相同,逻辑属性也适用于每个方法,而内部方法可以强制回滚外部方法事务. 比照Spring TransactionInterceptor(评论是我的) try {
retVal = invocation.proceed();
}
catch (Throwable ex) {
completeTransactionAfterThrowing(txInfo,ex);
throw ex;
}
completeTransactionAfterThrowing(): // txinfo is proper to the invocation target method
if (txInfo.transactionAttribute.rollbackOn(ex)) {
try {
txInfo.getTransactionManager().rollback(txInfo.getTransactionStatus());
}
AbstractPlatformTransactionManager.processRollback(): else if (status.isNewTransaction()) { //requiresnew
doRollback(status);
}
else if (status.hasTransaction()) { //requiered
[...]
doSetRollbackOnly(status);
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
