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

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

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

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

回滾邏輯如下:

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

詳細解析

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

根據@Transactional注解中rollbackFor、rollbackForClassName、noRollbackForClassName配置的值,找到最符合ex的異常類型,如果符合的異常類型不是NoRollbackRuleAttribute,則可以執行回滾。如果@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沒有配置,默認調用父類的 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);}

回滾處理

如果存在安全點,則回滾事務至安全點,這個主要是處理嵌套事務,回滾安全點的操作還是交給了數據庫處理. 當前事務是一個新事務時,那么直接回滾,使用的是DataSourceTransactionManager事務管理器,所以調用DataSourceTransactionManager#doRollback,直接調用數據庫連接的回滾方法。 當前存在事務,但又不是一個新的事務,只把事務的狀態標記為read-only,等到事務鏈執行完畢后,統一回滾,調用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); } //如果有事務但不是新事務,則把標記事務狀態,等事務鏈執行完畢后統一回滾 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); }}事務提交

事務提交邏輯如下:

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

代碼如下:

@Overridepublic final void commit(TransactionStatus status) throws TransactionException { //1. 判斷事務是不是已經完成 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. 如果在事務鏈中已經被標記回滾,那么不會嘗試提交事務,直接回滾,不過我沒找到在哪設置這個值 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事務回滾和事務提交的詳細內容,更多關于Spring事務回滾和事務提交的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久国产影院| 视频在线在亚洲| 一区二区电影| 性一交一乱一区二区洋洋av| 在线日韩成人| 中文字幕一区日韩精品| 亚洲午夜久久久久久尤物| 日本精品黄色| 国产a久久精品一区二区三区| 国产欧美三级| 国产精品综合色区在线观看| 亚洲精品动态| 欧美日韩1区| 国产伦精品一区二区三区视频 | 精品国产欧美| 精品一区二区三区的国产在线观看| 免费看久久久| 福利在线免费视频| 久久国产中文字幕| 尹人成人综合网| 亚洲精品一二| 欧美久久久网站| 精品免费在线| 久久久夜夜夜| 国产一区导航| 日韩av一区二| 精品一区二区三区四区五区| 日韩亚洲一区在线| 蜜臀国产一区| 免费观看久久av| 蜜桃久久精品一区二区| 偷拍亚洲精品| 精品资源在线| 激情婷婷亚洲| 综合亚洲视频| 久久精品亚洲| 99久久久久久中文字幕一区| 久久成人一区| 国产精品tv| 色老板在线视频一区二区| 亚洲女同中文字幕| 日韩美女精品| 精品国产一级| 日韩另类视频| 日韩一区网站| 国产一区二区色噜噜| 国产综合精品一区| 青草国产精品| 日韩影院二区| 亚洲尤物av| 精品视频高潮| 国产婷婷精品| 国产精品密蕾丝视频下载| 久久精品成人| 日韩va亚洲va欧美va久久| 91亚洲国产高清| 亚洲深深色噜噜狠狠爱网站| 国产精品乱战久久久| 日韩中文影院| 少妇精品久久久| 国产精品精品| 亚洲人成精品久久久| 综合日韩av| 亚洲免费一区三区| 蜜臀国产一区| 日本特黄久久久高潮| 久久久久99| 国产情侣一区在线| 中文久久精品| 97人人精品| 国产亚洲精品美女久久| 91九色精品| 久久久免费人体| 黄色国产精品| 国产成人黄色| 日韩精品欧美精品| 亚洲精品中文字幕乱码| 久久这里只有精品一区二区| 首页国产欧美久久| 国产99精品一区| 久久精品国产福利| 亚洲综合中文| 美女久久久久| 色在线视频观看| 国产精品亚洲产品| 免费一级片91| 精品在线91| 人在线成免费视频| 国产情侣一区在线| 亚洲视频二区| 自由日本语亚洲人高潮| 超碰成人av| 麻豆精品蜜桃视频网站| 婷婷综合福利| 亚洲一区二区三区高清不卡| 久久九九精品| 中文字幕成在线观看| 国产乱子精品一区二区在线观看| 免费人成在线不卡| 国产精品视区| 亚洲一级网站| 久久亚洲国产| 国产精品亚洲一区二区三区在线观看| 91大神在线观看线路一区| 视频一区国产视频| 久久久久.com| 天堂√8在线中文| 国产成人免费精品| 国产精品美女久久久久久不卡| 欧美一区网站| 午夜亚洲福利| 亚久久调教视频| 亚洲精品一二| 亚洲资源在线| 免费观看在线色综合| 国产亚洲精品v| 狠狠干成人综合网| 亚洲精品国产偷自在线观看| 色婷婷色综合| 国产中文欧美日韩在线| 久久精品二区亚洲w码 | 久久中文字幕一区二区三区| 日韩高清三区| 日韩三级久久| 综合国产在线| 日韩视频1区| 亚洲aa在线| 青青草91视频| 国产香蕉精品| 国产精品成人3p一区二区三区| 日韩精品免费视频人成| 亚洲精一区二区三区| 蜜臀av在线播放一区二区三区| 丝袜美腿一区二区三区| 视频一区中文字幕国产| 一区二区三区四区日韩| 亚洲2区在线| 国产欧美日韩精品高清二区综合区| 国产亚洲精品美女久久 | 久久久久久美女精品| 激情欧美一区二区三区| 欧美日韩精品一本二本三本| 黄色成人91| 亚洲免费中文| 亚洲三级av| 国产亚洲第一伦理第一区| 国产精品久久乐| 中文在线中文资源| 亚洲精品一区二区妖精| 免费久久99精品国产| 日韩av网站免费在线| 欧美激情五月| 日韩在线观看不卡| 另类国产ts人妖高潮视频| 日本va欧美va欧美va精品| 久久精品午夜| 欧美二区视频| 日韩一区精品| 精品视频自拍| 国产在线成人| 日韩激情精品| 精品高清久久| 91久久国产| 国产一区 二区| 日韩成人亚洲| 综合色一区二区| 久久精品国产免费| 五月天久久网站| 欧美日本精品| 播放一区二区| 日本不卡高清视频| 日韩欧美一区二区三区免费看| 99视频精品| 国产亚洲精品美女久久| 色综合www| 亚洲精品黄色| 久久电影tv| 亚洲欧洲免费| 国产伦久视频在线观看| 久久电影一区| 精品国产亚洲一区二区三区在线 | 都市激情国产精品| 中文一区在线| 久久不卡日韩美女| 久久精品91| 日本va欧美va欧美va精品| 日韩欧美一区二区三区在线视频| 亚洲制服欧美另类| 裤袜国产欧美精品一区| 综合国产视频| 亚洲电影有码| 日本视频在线一区| 久久精品播放| 国产精品网站在线看| 欧美日韩国产精品一区二区亚洲| 欧美激情麻豆| 免费看欧美美女黄的网站| 日韩精品永久网址| 日韩久久99| 亚洲经典在线|