成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java 事務(wù)詳解

cyrils / 1682人閱讀

摘要:一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾。持久性也稱永久性,指一個事務(wù)一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應(yīng)該是永久性的。事務(wù)與相關(guān)聯(lián),并通過調(diào)用實例化。強制此事務(wù)回滾。為此事務(wù)注冊用戶同步回調(diào)。檢查事務(wù)是否成功提交。

一、事務(wù)

(1)事務(wù)(Transaction),一般是指要做的或所做的事情。在計算機術(shù)語中是指訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項的一個程序執(zhí)行單元(unit)。

(2)事務(wù)應(yīng)該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。
原子性(atomicity)。一個事務(wù)是一個不可分割的工作單位。比如A向B轉(zhuǎn)賬1000元,那么這就一定要保證原子性(要么同時成功,要么同時失敗)。

一致性(consistency)。事務(wù)必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài),一致性與原子性是密切相關(guān)的。比如A向B轉(zhuǎn)賬,不可能A扣了錢,B卻沒收到(這就是非一致性)。

隔離性(isolation)。一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾。即一個事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對并發(fā)的其他事務(wù)是隔離的,并發(fā)執(zhí)行的各個事務(wù)之間不能互相干擾。比如A和C同時向B轉(zhuǎn)賬,那B同一時間只能和一個人交易(同時只能有一個交易在執(zhí)行)。

持久性(durability)。持久性也稱永久性(permanence),指一個事務(wù)一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應(yīng)該是永久性的。接下來的其他操作或故障不應(yīng)該對其有任何影響。A向B轉(zhuǎn)賬,成功以后B的賬戶就存入了轉(zhuǎn)賬數(shù)額,在不做其他的操作前提下數(shù)據(jù)是永久性的。

二、Hibernate事務(wù)處理

(1)Hibernate事務(wù)處理

在Hibernate框架中,使用Transaction接口來維護了事務(wù)實現(xiàn)(JTA,JDBC)的抽象。
事務(wù)與Session相關(guān)聯(lián),并通過調(diào)用session.beginTransaction()實例化。

Transaction接口的方法如下:
void begin() 開始一個新的事務(wù)。
void commit() 結(jié)束工作單位,在FlushMode.NEVER中除外。
void rollback() 強制此事務(wù)回滾。
void setTimeout(int seconds) 它為由此實例開始的后續(xù)調(diào)用啟動的任何事務(wù)設(shè)置事務(wù)超時。
boolean isAlive() 檢查交易是否仍然存在。
void registerSynchronization(Synchronization s) 為此事務(wù)注冊用戶同步回調(diào)。
boolean wasCommited() 檢查事務(wù)是否成功提交。
boolean wasRolledBack() 檢查事務(wù)是否成功回滾。

(2)Hibernate事務(wù)綁定

Hibernate使用本地線程綁定事務(wù)(所以不能在一個線程中啟動多個線程去操作不同的數(shù)據(jù)工作),當(dāng)請求Service方法時打開通過Soring AOP 自動打開 Hibernate Session,啟動事務(wù),執(zhí)行所有與數(shù)據(jù)相關(guān)的工作,結(jié)束事務(wù)并關(guān)閉Session。模式的關(guān)鍵是交易與交易之間的一對一關(guān)系 Session。

例子:

public Integer save(One one,Tow tow) {
    oneDao.save(one);
    towDao.save(tow);
    return 1;
}

三、分布式事務(wù)

(1)JTA
在應(yīng)用系統(tǒng)數(shù)據(jù)量越來越大時,系統(tǒng)數(shù)據(jù)就需要分布在不同的數(shù)據(jù)庫中,當(dāng)業(yè)務(wù)需求在多個數(shù)據(jù)庫中做原子性操作時就可以選擇JTA (Java Transaction API),JTA事務(wù)比JDBC事務(wù)更強大。一個JTA事務(wù)可以有多個參與者,而一個JDBC事務(wù)則被限定在一個單一的數(shù)據(jù)庫連接。

(2)JTA原理
不同的數(shù)據(jù)庫有不同的數(shù)據(jù)庫供應(yīng)商,JTA就是將這個不同的數(shù)據(jù)庫管理起來,統(tǒng)一創(chuàng)建一個原子事務(wù),全部成功即成功,一個不成功就回滾所有的操作(JTA還是較重量級)

(3)實例
Spring有很多的JTA框架,這里使用的是atomikos框架,具體代碼請點擊鏈接查看

四、分布式消息最終一致性事務(wù)

(1)最終一致性
當(dāng)應(yīng)用系統(tǒng)數(shù)據(jù)越來越龐大,最終數(shù)據(jù)的一致性成為了一個很好的解決方案,即能即時響應(yīng),又能很好的完成多個數(shù)據(jù)操作(但不能保證一定成功,可能過了一段時間最終卻沒有成功)。

(2)實現(xiàn)原理
當(dāng)應(yīng)用收到請求,應(yīng)用會先將用戶請求的數(shù)據(jù)保存到分布式消息中間件中,做一個保存操作。保存成功后就給用戶返回提交成功信息。接著分布式消息中間件將請求在發(fā)送到不同的處理機器上,處理機器收到消息在進行業(yè)務(wù)處理。比如A給B轉(zhuǎn)賬,A先提交轉(zhuǎn)賬信息(已經(jīng)扣款),然后消息被發(fā)送的分布式消息中間件上,消息中間件在發(fā)送到處理機器上面做處理,轉(zhuǎn)賬成功后則在給用戶發(fā)送轉(zhuǎn)賬成功信息,不成功則把款退回去。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71536.html

相關(guān)文章

  • 事務(wù)隔離級別(圖文詳解)

    摘要:事務(wù)隔離級別圖文詳解什么是事務(wù)事務(wù)是邏輯上的一組操作,要么都執(zhí)行,要么都不執(zhí)行。可串行化最高的隔離級別,完全服從的隔離級別。存儲引擎在分布式事務(wù)的情況下一般會用到可串行化隔離級別?;貪L會結(jié)束用戶的事務(wù),并撤銷正在進行的所有未提交的修改。 該文已加入筆主的開源項目——JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識的文檔類項目),地址:https://github.c...

    taowen 評論0 收藏0
  • 可能是最漂亮的Spring事務(wù)管理詳解

    摘要:事務(wù)隔離級別定義了一個事務(wù)可能受其他并發(fā)事務(wù)影響的程度我們先來看一下并發(fā)事務(wù)帶來的問題,然后再來介紹一下接口中定義了五個表示隔離級別的常量。 Java面試通關(guān)手冊(Java學(xué)習(xí)指南):https://github.com/Snailclimb/Java_Guide 微信閱讀地址鏈接:可能是最漂亮的Spring事務(wù)管理詳解 事務(wù)概念回顧 什么是事務(wù)? 事務(wù)是邏輯上的一組操作,要么都執(zhí)行,...

    鄒立鵬 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<