精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

@Transactional 竟也能解決分布式事務?

開發 前端
在Sharding-JDBC中明明只是簡單的使用@Transactional這個本地事務注解,為什么在跨庫插入數據時候卻能夠同時回滾?

前天朋友咨詢過我一個問題,大致內容如下:

圖片

這位讀者什么意思呢?簡單的總結下:在Sharding-JDBC中明明只是簡單的使用@Transactional這個本地事務注解,為什么在跨庫插入數據時候卻能夠同時回滾?

我們知道單數據節點的情況下保持事務是非常簡單的,只需要使用本地事務即可輕松解決,比如常用的注解:@Transactional。

但是在分庫后將會存在跨庫的事務,此時本地事務還能保證事務嗎?

這篇文章就以球友的提問來聊一下Sharding-JDBC中的本地事務。

本地事務

Sharding-JDBC中的本地事務可能會讓大家有一個誤解,還是以商品表為例:將商品表根據商品ID進行水平分庫,分為兩個庫,如下:

圖片

分庫的配置這里就不貼了,詳情看源碼。

此時向其中批量插入數據,偽代碼如下:

@Transactional
public int insertBatch(){
for(int i=0;i<10;i++){
insert(product);
.......
}
}

上述案例中使用了@Transactional?開啟了本地事務,但是內部在插入數據時,Sharding-JDB會根據product_id?這個分片鍵進行分庫,那么這個業務方法肯定是跨了DB1、DB2?這兩個庫,@Transactional這個注解能解決嗎?

假象:手動在內部模擬拋出異常,還真的是都rollback了。

此時很多人都迷糊了,Sharding-JDBC中的本地事務真的是可以保證分布式事務?

真實結論:Sharding-JDBC中的本地事務無法保證分布式事。

Sharding-JDBC中的本地事務在以下兩種情況是完全支持的:

  • 支持非跨庫事務,比如僅分表、在單庫中操作。
  • 支持因邏輯異常導致的跨庫事務,比如上述的操作,跨兩個庫插入數據,插入完成后拋出異常。

本地事務不支持的情況:

  • 不支持因網絡、硬件異常導致的跨庫事務;例如:同一事務中,跨兩個庫更新,更新完畢后、未提交之前,第一個庫宕機,則只有第二個庫數據提交。

對于因網絡、硬件異常導致的跨庫事務無法支持很好理解,在分布式事務中無論是兩階段還是三階段提交都是直接或者間接滿足以下兩個條件:

  • 有一個事務協調者
  • 事務日志記錄

本地事務并未滿足上述條件,自然是無法支持

為什么邏輯異常導致的跨庫事務能夠支持?

Spring的本地事務大家都很了解,也經常用,并不支持的跨庫事務,那么為什么Sharding-JDBC中卻能支持呢?

想要了解其中的貓膩必然需要從Sharding-JDBC的源碼入手,下圖是在Sharding-JDBC一條SQL處理的流程:

圖片

Sharding-JDBC中的一條SQL會經過改寫,拆分成不同數據源的SQL,比如一條select語句,會按照其中分片鍵拆分成對應數據源的SQL,然后在不同數據源中的執行,最終會提交或者回滾。

想要解釋上述的問題,只需要看ShardingConnection,這是Sharding-JDBC自定義實現的,繼承關系如下圖:

圖片

可以看到ShardingConnection?繼承了java.sql.Connection,這個類就不必多解釋了,在學習JDBC的時候應該都有所接觸,直接和數據庫打交道的一個類。

想要知道為什么支持跨庫事務的回滾,肯定要找到其中的rollback方法,如下:

@Override
public void rollback() throws SQLException {
//① 本地事務
f (TransactionType.LOCAL == transactionType) {
super.rollback();
} else {
//② 非本地事務
shardingTransactionManager.rollback();
}
}

rollback?的方法中區分了本地事務和分布式事務,如果是本地事務將調用父類的rollback方法,如下:

//父類:AbstractConnectionAdapter#rollback

@Override
public void rollback() throws SQLException {
//cachedConnections中存儲了數據源,這里是ds1/ds2
forceExecuteTemplate.execute(cachedConnections.values(), Connection::rollback);
}

這里是調用ForceExecuteTemplate#execute()?方法執行,其實內部就是遍歷數據源去執行對應的rollback方法,如下:

public void execute(final Collection<T> targets, final ForceExecuteCallback<T> callback) throws SQLException {
Collection<SQLException> exceptions = new LinkedList<>();
for (T each : targets) {
try {
callback.execute(each);
} catch (final SQLException ex) {
exceptions.add(ex);
}
}
throwSQLExceptionIfNecessary(exceptions);
}

看到這里已經很明了了,rollback? 在各個數據源中回滾且未記錄任何事務日志,因此在非硬件、網絡的情況下都是可以正常回滾的,一旦因為網絡、硬件故障,可能導致某個數據源rollback失敗,這樣即使程序恢復了正常,也無undo日志繼續進行rollback,因此這里就造成了數據不一致了。

總結

僅僅依靠Spring自帶的本地事務(@Transactional)是無法保證跨庫的分布式事務,不要被Sharding-JDBC的假象迷惑了。

當然Sharding-JDBC對于跨庫事務也是有一定的支持,大致分成三類:

  • 強一致性的XA協議事務
  • 基于Base的柔性事務
  • 通過SPI機制自定義擴展的分布式事務解決方案

本文只是拋磚引玉簡單的介紹下分庫分表后的事務處理,后文會針對以上三類方案詳細介紹一下。

責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2022-03-24 07:51:27

seata分布式事務Java

2025-04-29 04:00:00

分布式事務事務消息

2022-06-27 08:21:05

Seata分布式事務微服務

2022-06-14 10:47:00

分布式事務數據

2022-06-21 08:27:22

Seata分布式事務

2017-07-26 15:08:05

大數據分布式事務

2025-04-30 10:44:02

2023-09-14 15:44:46

分布式事務數據存儲

2024-10-09 14:14:07

2020-05-28 09:35:05

分布式事務方案

2019-10-10 09:16:34

Zookeeper架構分布式

2009-06-19 15:28:31

JDBC分布式事務

2021-09-29 09:07:37

分布式架構系統

2009-09-18 15:10:13

分布式事務LINQ TO SQL

2025-04-28 00:44:04

2020-12-09 09:14:57

SpringCloudSeata 分布式

2019-06-26 09:41:44

分布式事務微服務

2025-05-15 08:05:00

2019-01-11 18:22:07

阿里巴巴技術開源

2010-07-21 13:53:41

SQL Server分
點贊
收藏

51CTO技術棧公眾號

午夜av在线免费观看| 鲁丝一区二区三区免费| 亚洲图片第一页| 国产精品视频一区视频二区 | 91久久偷偷做嫩草影院| 日本网站免费观看| 91一区二区| 日韩精品在线一区| 91淫黄看大片| 91豆花视频在线播放| 日本一区二区三区在线不卡| 亚洲xxxx在线| 国产又粗又猛又黄视频| 综合久久婷婷| 中文字幕在线精品| 三级黄色片网站| 久久三级中文| 91久久精品一区二区二区| 日本福利视频在线观看| seseavlu视频在线| av在线不卡免费看| 91亚洲国产精品| 一级黄色av片| 在线一区视频| 国内精品400部情侣激情| 欧美乱大交做爰xxxⅹ小说| 日韩三区视频| 欧美日韩国产一级二级| 日本xxxxxxx免费视频| 黑人玩欧美人三根一起进| 一色桃子久久精品亚洲| 日本欧美色综合网站免费| 人妻精品一区二区三区| 国内外成人在线视频| 国产精品国语对白| 一区二区三区日韩| 亚洲免费观看高清完整版在线观看熊| 99精品国产高清一区二区| 国产91av在线播放| 亚洲综合99| 97激碰免费视频| 免费在线看黄网址| 香港一级纯黄大片| 精品999日本| 免费91在线视频| 黑人狂躁日本娇小| 欧美熟乱15p| 亚洲一区二区久久| 成年人网站免费在线观看| 国语一区二区三区| 欧美草草影院在线视频| 91蝌蚪视频在线| 经典三级久久| 欧美成人三级在线| 无码人妻一区二区三区免费n鬼沢| 成人在线日韩| 欧美一级理论片| 免费欧美一级片| 亚洲精品a区| 精品国精品国产尤物美女| 中文字幕天堂av| 久9re热视频这里只有精品| 亚洲国产欧美在线成人app| 天天躁日日躁狠狠躁av| 麻豆精品av| 精品呦交小u女在线| 欧美日韩高清丝袜| 日韩a一区二区| 久久亚洲一区二区三区四区五区高| 日本黄色片免费观看| 日本久久一二三四| 久久九九亚洲综合| 九九热视频精品| 亚洲区欧美区| 国产精品美女av| 国产女18毛片多18精品| 国产一区美女在线| 国产精品一区在线观看| 国产小视频免费在线网址| 国产精品网站在线播放| 日本a级片在线观看| ****av在线网毛片| 91福利在线导航| 黄色片免费网址| 欧美高清视频看片在线观看| 国产一区二区三区三区在线观看| 国产精品国产精品88| 国产欧美日韩一级| 亚洲色图五月天| 91免费看片在线观看| 成人51免费| 国产毛片av在线| 91久久国产视频| 色婷婷成人在线| 蜜桃成人在线| 欧美极品少妇全裸体| 欧美三级中文字幕| 水蜜桃一区二区三区| 免费av在线播放| 精品久久在线播放| 亚洲欧美国产中文| 老牛国内精品亚洲成av人片| 一区二区福利视频| 久久精品国产亚洲av香蕉| 蜜芽一区二区三区| 国产一区二区精品在线| 米奇精品一区二区三区| 一本色道久久综合亚洲aⅴ蜜桃| 亚洲黄色片免费| 免费精品国产的网站免费观看| 久久精品免费电影| jizz国产在线观看| 成人美女在线视频| 久久久国产精华液999999| 一个人看的www视频在线免费观看 一个人www视频在线免费观看 | 婷婷久久久久久| 综合色天天鬼久久鬼色| 久久精品一区二| 中文字幕久久精品一区二区| 少妇高潮 亚洲精品| 天堂а√在线中文在线新版| 国产精品18久久久久久久网站| 日韩精品无码一区二区三区| 国产极品在线观看| 精品乱人伦小说| 天天鲁一鲁摸一摸爽一爽| 日日摸夜夜添夜夜添国产精品| 精品人伦一区二区三区| 性欧美videos高清hd4k| 欧美日韩高清一区二区不卡| 亚洲第一综合网| 销魂美女一区二区三区视频在线| 国产欧美日韩在线播放| 在线欧美三级| 欧美一区二区三区日韩视频| 免费看裸体网站| 日本网站在线观看一区二区三区| 精品日韩电影| 最新欧美色图| 精品一区二区电影| www.国产com| 26uuu欧美| 日本精品一区在线观看| 九九久久婷婷| 国产精品h在线观看| 国产视频福利在线| 在线视频中文字幕一区二区| 免费网站在线高清观看| 人人精品人人爱| 伊人久久99| 99国内精品久久久久| 久热精品视频在线观看一区| a级片在线视频| **欧美大码日韩| 日本黄色一级网站| 亚洲午夜黄色| 久久国产精品久久| 丝袜美腿一区| 日韩色av导航| www夜片内射视频日韩精品成人| 亚洲精品成人少妇| 国产免费a级片| av不卡在线| 日本午夜精品电影| 欧美亚洲人成在线| 欧美另类极品videosbestfree| 亚洲国产日韩在线观看| 精品电影在线观看| 亚洲码无人客一区二区三区| 久热成人在线视频| 伊人久久在线观看| 伊人久久综合影院| 国产精品视频自拍| 久久亚洲导航| 亚洲视频999| 国产精品无码久久久久成人app| 国产精品免费看片| 日本人妻一区二区三区| 久久xxxx精品视频| 一级一片免费播放| 99精品在免费线中文字幕网站一区 | 人妻无码一区二区三区免费| 国产伦精品一区二区三区免费| 极品美女扒开粉嫩小泬| 成人vr资源| 国产91免费视频| 国产超碰精品| 欧美日韩电影在线观看| 欧美男男激情freegay| 69堂成人精品免费视频| 国产成人亚洲精品自产在线 | 国产99久久久久| 少妇性饥渴无码a区免费| 性欧美欧美巨大69| 欧美精品中文字幕一区二区| 高清精品久久| 日本不卡免费高清视频| 国产在线1区| 亚洲欧美制服丝袜| 亚洲美女性生活| 欧美色偷偷大香| 国产对白videos麻豆高潮| 国产精品私人自拍| 蜜桃精品成人影片| 国产成人av电影在线播放| 一级在线免费视频| 日韩一级精品| 999久久欧美人妻一区二区| 欧美**vk| 精品999在线观看| 亚洲一区二区三区免费| 成人黄色av网| 99九九久久| 欧美中文在线观看国产| 波多野结衣在线观看| 操人视频在线观看欧美| 川上优的av在线一区二区| 日韩精品视频中文在线观看 | 看片一区二区| 全亚洲最色的网站在线观看| av中文字幕电影在线看| 免费91在线视频| 免费观看在线黄色网| 色哟哟亚洲精品一区二区| 日韩欧美在线番号| 亚洲成人av在线播放| 成人激情四射网| 6080国产精品一区二区| 伊人网av在线| 欧美性生活大片视频| 91精品国产高清一区二区三密臀| 性欧美疯狂xxxxbbbb| 日本特黄一级片| 亚洲成人免费视频| 日韩av在线天堂| 午夜电影久久久| 国产中文字幕免费| 亚洲va欧美va天堂v国产综合| 欧美片一区二区| 亚洲国产日韩在线一区模特| 免费中文字幕视频| 亚洲精品中文字幕在线观看| 国产精品 欧美激情| 亚洲色图.com| 青娱乐国产精品| 亚洲一二三四区不卡| 黄色激情视频在线观看| 亚洲成a人在线观看| 午夜精品三级久久久有码| 午夜精品福利一区二区三区蜜桃| 日韩在线观看第一页| 久久久久久美女精品| 久久日一线二线三线suv| 亚洲精品一区久久久久久| 亚洲美女搞黄| 欧美成人xxxx| 91精品国产综合久久男男| 日韩av黄色| 91在线直播亚洲| 88久久精品| 久久国产日韩欧美| 国产一区二区三区网| 亚洲激情电影在线| 在线中文字幕第一区| 久久99中文字幕| 免费看黄裸体一级大秀欧美| www.日本xxxx| 国内国产精品久久| 欧美激情 亚洲| 久久精品一区二区三区四区| 91狠狠综合久久久| 一区二区三区在线观看网站| 在线观看中文字幕视频| 欧美色图第一页| 亚洲经典一区二区三区| 亚洲日本成人网| 欧美jizzhd欧美| 91国内产香蕉| 激情亚洲小说| 国产精品久久久久久久久婷婷 | 美女在线观看视频一区二区| 久久久久久久久久毛片| av亚洲产国偷v产偷v自拍| 无码人妻丰满熟妇啪啪欧美| 亚洲欧美日韩国产成人精品影院| 日本特黄一级片| 欧美日韩你懂的| 蜜桃视频在线观看www| 在线看日韩欧美| 国产精品186在线观看在线播放| 国产97色在线|日韩| 精品精品视频| 日韩视频在线播放| 激情婷婷久久| 99日在线视频| 久久婷婷久久一区二区三区| 伊人在线视频观看| 91久久精品网| 日韩在线视频免费| 精品国产自在精品国产浪潮| 麻豆蜜桃在线观看| 亚洲综合精品伊人久久| 成人在线免费小视频| 少妇av一区二区三区无码| 久久成人精品无人区| www.超碰97| 亚洲一卡二卡三卡四卡五卡| 姑娘第5集在线观看免费好剧| 亚洲第一精品夜夜躁人人爽 | 中文字幕一区二区三区在线播放| 91香蕉视频导航| 伊人久久大香线蕉无限次| 中文字幕在线乱| 日韩激情视频在线观看| 中文字幕在线观看网址| 伊人色综合久久天天人手人婷| 国产情侣呻吟对白高潮| 亚洲精品小视频| 超级白嫩亚洲国产第一| 999国产在线| 亚洲精品网址| 日韩不卡一二三| 国产日韩一级二级三级| 在线观看中文字幕视频| 亚洲国产日韩欧美在线图片| 在线观看中文字幕的网站| 91久热免费在线视频| 日韩综合精品| 亚洲天堂2018av| 欧美高清一级片在线观看| 99精品人妻国产毛片| 日韩精品小视频| 亚洲精品mv| 欧美1o一11sex性hdhd| aa国产精品| theav精尽人亡av| 精品福利在线观看| 午夜视频www| 45www国产精品网站| 亚洲美女久久| 干日本少妇首页| 久久先锋影音av鲁色资源网| 久久国产精品免费看| 日韩精品中文在线观看| 中文字幕资源网在线观看免费| 久久99九九| 久久久蜜桃一区二区人| 国产又大又粗又爽的毛片| 欧美色大人视频| 美女隐私在线观看| 92看片淫黄大片欧美看国产片| 亚洲综合色网| 国产精久久久久| 亚洲va欧美va国产va天堂影院| 刘玥91精选国产在线观看| 97国产精品免费视频| 猛男gaygay欧美视频| 一级特黄性色生活片| 国产精品久久久久久久蜜臀 | 性欧美大战久久久久久久免费观看| 日韩av不卡在线观看| 日本免费网站视频| 日韩视频免费直播| 极品在线视频| 日本一区视频在线播放| 韩国av一区二区三区在线观看| 免费在线黄色片| 亚洲男人天堂2024| av一级久久| 九一国产精品视频| 国产香蕉久久精品综合网| 亚洲天堂2021av| 久久久免费高清电视剧观看| 亚州国产精品| 一级做a免费视频| 亚洲制服丝袜av| 黄色小视频在线免费观看| 91香蕉国产在线观看| 亚洲人人精品| 人与嘼交av免费| 日韩女优av电影| 日韩电影网站| 激情视频小说图片| 久久久蜜臀国产一区二区| 亚洲一区二区影视| 久久琪琪电影院| 日本一区二区高清不卡| 麻豆短视频在线观看| 欧美日免费三级在线| 女囚岛在线观看| 日韩中文字幕一区二区| 国产高清久久久久| 一级特黄免费视频| 欧美国产视频一区二区| 精品香蕉视频| 黄色在线免费播放| 欧美剧在线免费观看网站| 亚洲色图官网| avove在线观看| 国产精品日日摸夜夜摸av|