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); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Java Statement.execute()方法:执行SQL语句
- Java实现文件的加密解密功能示例
- java – Glassfish Security – jdbcRealm:如何使用SHA-25
- java – 用于将资源从运行jar复制到外部的Idiomatic Clojur
- Java 读取PDF中的文本和图片
- java – 动态更改jasper的textFieldExpression的class属性
- java – 提高协议缓冲区的性能
- java – Array-List里面的构造函数作为参数之一,如何创建一
- java – 是否可以使用google api搜索谷歌产品(以前称为www.
- java – 在GWT中使用RequestBuilder处理附件