日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解Spring事務回滾和事務提交

瀏覽:16日期:2023-07-18 17:47:18
事務回滾

回滾邏輯如下:

判斷是否存在事務,只有存在事務才執(zhí)行回滾 根據(jù)異常類型判斷是否回滾。如果異常類型不符合,仍然會提交事務 回滾處理

詳細解析

判斷是否存在事務,只有存在事務才執(zhí)行回滾,即是否有@Transactional事務注解或相關事務切面 根據(jù)異常類型判斷是否回滾。如果異常類型不符合,仍然會提交事務

根據(jù)@Transactional注解中rollbackFor、rollbackForClassName、noRollbackForClassName配置的值,找到最符合ex的異常類型,如果符合的異常類型不是NoRollbackRuleAttribute,則可以執(zhí)行回滾。如果@Transactional沒有配置,則默認使用RuntimeException和Error異常。代碼如下:

@Overridepublic boolean rollbackOn(Throwable ex) { if (logger.isTraceEnabled()) { logger.trace('Applying rules to determine whether transaction should rollback on ' + ex); } RollbackRuleAttribute winner = null; int deepest = Integer.MAX_VALUE; //rollbackRules保存@Transactional注解中rollbackFor、rollbackForClassName、noRollbackForClassName配置的值 if (this.rollbackRules != null) { for (RollbackRuleAttribute rule : this.rollbackRules) { int depth = rule.getDepth(ex); if (depth >= 0 && depth < deepest) { deepest = depth; winner = rule; } } } if (logger.isTraceEnabled()) { logger.trace('Winning rollback rule is: ' + winner); } // User superclass behavior (rollback on unchecked) if no rule matches. //若@Transactional沒有配置,默認調(diào)用父類的 if (winner == null) { logger.trace('No relevant rollback rule found: applying default rules'); return super.rollbackOn(ex); } return !(winner instanceof NoRollbackRuleAttribute);}//super@Overridepublic boolean rollbackOn(Throwable ex) { return (ex instanceof RuntimeException || ex instanceof Error);}

回滾處理

如果存在安全點,則回滾事務至安全點,這個主要是處理嵌套事務,回滾安全點的操作還是交給了數(shù)據(jù)庫處理. 當前事務是一個新事務時,那么直接回滾,使用的是DataSourceTransactionManager事務管理器,所以調(diào)用DataSourceTransactionManager#doRollback,直接調(diào)用數(shù)據(jù)庫連接的回滾方法。 當前存在事務,但又不是一個新的事務,只把事務的狀態(tài)標記為read-only,等到事務鏈執(zhí)行完畢后,統(tǒng)一回滾,調(diào)用DataSourceTransactionManager#doSetRollbackOnly 清空記錄的資源并將掛起的資源恢復

代碼如下:

private void processRollback(DefaultTransactionStatus status) { try { try { triggerBeforeCompletion(status); //如果有安全點,回滾至安全點 if (status.hasSavepoint()) { if (status.isDebug()) { logger.debug('Rolling back transaction to savepoint'); } status.rollbackToHeldSavepoint(); } //如果是新事務,回滾事務 else if (status.isNewTransaction()) { if (status.isDebug()) { logger.debug('Initiating transaction rollback'); } doRollback(status); } //如果有事務但不是新事務,則把標記事務狀態(tài),等事務鏈執(zhí)行完畢后統(tǒng)一回滾 else if (status.hasTransaction()) { if (status.isLocalRollbackOnly() || isGlobalRollbackOnParticipationFailure()) { if (status.isDebug()) { logger.debug('Participating transaction failed - marking existing transaction as rollback-only'); } doSetRollbackOnly(status); } else { if (status.isDebug()) { logger.debug('Participating transaction failed - letting transaction originator decide on rollback'); } } } else { logger.debug('Should roll back transaction but cannot - no transaction available'); } } catch (RuntimeException ex) { triggerAfterCompletion(status, TransactionSynchronization.STATUS_UNKNOWN); throw ex; } catch (Error err) { triggerAfterCompletion(status, TransactionSynchronization.STATUS_UNKNOWN); throw err; } triggerAfterCompletion(status, TransactionSynchronization.STATUS_ROLLED_BACK); } finally { //清空記錄的資源并將掛起的資源恢復 cleanupAfterCompletion(status); }}事務提交

事務提交邏輯如下:

判斷事務是否已經(jīng)完成,如果完成拋出異常 判斷事務是否已經(jīng)被標記成回滾,則執(zhí)行回滾操作 嵌入事務標記回滾,如果嵌入事務拋出了異常執(zhí)行了回滾,但是在調(diào)用方把嵌入事務的異常個捕獲沒有拋出,就會執(zhí)行這一步。 提交事務

代碼如下:

@Overridepublic final void commit(TransactionStatus status) throws TransactionException { //1. 判斷事務是不是已經(jīng)完成 if (status.isCompleted()) { throw new IllegalTransactionStateException( 'Transaction is already completed - do not call commit or rollback more than once per transaction'); } DefaultTransactionStatus defStatus = (DefaultTransactionStatus) status; //2. 如果在事務鏈中已經(jīng)被標記回滾,那么不會嘗試提交事務,直接回滾,不過我沒找到在哪設置這個值 if (defStatus.isLocalRollbackOnly()) { if (defStatus.isDebug()) { logger.debug('Transactional code has requested rollback'); } processRollback(defStatus); return; } //3. shouldCommitOnGlobalRollbackOnly()默認返回false,isGlobalRollbackOnly是在嵌入事務回滾的時候賦值的 if (!shouldCommitOnGlobalRollbackOnly() && defStatus.isGlobalRollbackOnly()) { if (defStatus.isDebug()) { logger.debug('Global transaction is marked as rollback-only but transactional code requested commit'); } processRollback(defStatus); // Throw UnexpectedRollbackException only at outermost transaction boundary // or if explicitly asked to. if (status.isNewTransaction() || isFailEarlyOnGlobalRollbackOnly()) { throw new UnexpectedRollbackException( 'Transaction rolled back because it has been marked as rollback-only'); } return; } //4. 提交事務 processCommit(defStatus);}

以上就是詳解Spring事務回滾和事務提交的詳細內(nèi)容,更多關于Spring事務回滾和事務提交的資料請關注好吧啦網(wǎng)其它相關文章!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
蜜桃成人av| 国产精品99一区二区三| 日韩高清国产一区在线| 人人草在线视频| 国产精品mv在线观看| 蜜臀精品一区二区三区在线观看 | 欧美日韩黄网站| 99国产精品99久久久久久粉嫩| 日韩国产一二三区| 欧美日韩国产传媒| 精品久久精品| 久久av网站| 欧美国产另类| 国产精品欧美在线观看| 日韩精品第一| 日韩激情一区二区| 亚洲欧美网站在线观看| 亚洲tv在线| 亚洲三级网站| 日韩精品a在线观看91| 中文无码久久精品| 午夜久久av| 亚洲精品欧洲| 亚洲精品黄色| 国产亚洲欧美日韩精品一区二区三区 | 欧美不卡视频| 欧美国产91| 亚洲无线观看| 福利一区二区三区视频在线观看| 久久亚洲二区| 一本色道精品久久一区二区三区| 久久亚洲成人| 亚洲在线国产日韩欧美| 在线看片一区| 国产乱人伦精品一区| 国产欧美日韩一级| 国产欧美69| 成人在线视频区| 国产高清一区| 国产伦理久久久久久妇女| 久久久久久久欧美精品| 极品裸体白嫩激情啪啪国产精品| 久久成人一区| 亚洲不卡视频| 国产精品tv| 新版的欧美在线视频| 日本亚洲视频| 国产suv精品一区| 爽好多水快深点欧美视频| 国产精品17p| 免费视频国产一区| 欧美午夜三级| 黑丝一区二区三区| 国产欧美日韩在线一区二区| a天堂资源在线| 日韩av在线免费观看不卡| 欧美搞黄网站| 国产一区二区三区四区大秀| 蜜桃视频一区二区三区| 精品国产不卡一区二区| 一区在线免费| 成人综合一区| 国产欧美在线| 亚洲一区免费| 欧美另类专区| 国产精品美女久久久久久不卡| 激情婷婷综合| 四虎4545www国产精品| 青青草精品视频| 中文亚洲免费| 亚洲香蕉网站| 99久久九九| 日韩久久一区二区三区| 久久av网址| 欧美黑人巨大videos精品| 丝袜美腿亚洲一区二区图片| 在线日韩欧美| 日韩欧美不卡| 日韩成人a**站| 高清久久精品| 高清一区二区三区| 欧美日韩午夜电影网| 911精品国产| 国产乱论精品| 麻豆精品一区二区综合av| 国产精品红桃| 免费精品一区| 91精品xxx在线观看| 私拍精品福利视频在线一区| 久久久久久黄| 亚洲一区二区免费在线观看| 亚洲天堂资源| 秋霞影视一区二区三区| 麻豆中文一区二区| 免费的成人av| 视频一区日韩精品| 六月婷婷一区| 日韩av资源网| 精品理论电影在线| 四虎4545www国产精品| 午夜日韩在线| 91成人福利| 国产高清不卡| 午夜国产精品视频| 日本欧美一区二区| 久久精品亚洲一区二区| www成人在线视频| 免费观看在线综合| 你懂的国产精品永久在线| 国产精品yjizz视频网| 色偷偷偷在线视频播放| 岛国av在线播放| 99在线精品视频在线观看| 日韩专区欧美专区| 蜜桃av一区二区| 亚洲香蕉久久| 国产成人精品三级高清久久91| 国产99久久| 欧美日韩一区自拍| 999国产精品999久久久久久| 亚州av一区| 久久天堂精品| 国产精一区二区| 91久久午夜| 在线手机中文字幕| 日韩制服丝袜av| 国产精品一区毛片| 亚洲成av人片一区二区密柚| 亚洲精品动态| 久久精品国产68国产精品亚洲| 日韩超碰人人爽人人做人人添| 国产精品久一| 国产精品99一区二区| 国产一区不卡| 日韩国产精品久久久| 日韩一级网站| 久久婷婷激情| 美女一区网站| 在线看片国产福利你懂的| 日韩一区中文| 国产日产精品_国产精品毛片| 婷婷成人基地| 午夜电影亚洲| 日韩久久精品| 日韩成人综合| 水蜜桃久久夜色精品一区| 国产日韩一区| 国产欧美大片| 国产探花一区二区| 国产精品亚洲欧美| 久久三级毛片| 国产中文在线播放| 久久久久久久久丰满| 欧美久久亚洲| 国产麻豆一区二区三区精品视频| 日韩国产在线一| 人人精品人人爱| 在线日韩电影| 韩日一区二区| 国产精品网址| 巨乳诱惑日韩免费av| 在线看片国产福利你懂的| 亚洲v天堂v手机在线| 亚洲特色特黄| 久久亚洲风情| 亚洲国产日韩欧美在线| 国产精品中文字幕制服诱惑| 久久亚洲视频| 久久91视频| 国产精品久久观看| 日韩美女精品| 97久久亚洲| 国产精品.xx视频.xxtv| 日本中文字幕不卡| 综合欧美精品| 日韩精品1区2区3区| 亚洲人妖在线| 国产精品啊啊啊| 久久字幕精品一区| 久久激情一区| 亚洲精品进入| 国产夫妻在线| 最新日韩欧美| 久久久国产精品入口麻豆| 精品国产中文字幕第一页| 奇米777国产一区国产二区| 男人的天堂久久精品| 国产精品三p一区二区| 日韩国产一区二区| 欧美视频二区| 久久精品在线| 亚洲综合二区| 日韩黄色在线观看| 日韩精品视频中文字幕| 日韩中文av| 亚洲不卡视频| 日韩精品一区二区三区免费观看| 在线手机中文字幕| 99热精品久久| 好吊日精品视频 |