摘要:一個事務的執行不能被其他事務干擾。持久性也稱永久性,指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。事務與相關聯,并通過調用實例化。強制此事務回滾。為此事務注冊用戶同步回調。檢查事務是否成功提交。
一、事務
(1)事務(Transaction),一般是指要做的或所做的事情。在計算機術語中是指訪問并可能更新數據庫中各種數據項的一個程序執行單元(unit)。
(2)事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。
原子性(atomicity)。一個事務是一個不可分割的工作單位。比如A向B轉賬1000元,那么這就一定要保證原子性(要么同時成功,要么同時失敗)。
一致性(consistency)。事務必須是使數據庫從一個一致性狀態變到另一個一致性狀態,一致性與原子性是密切相關的。比如A向B轉賬,不可能A扣了錢,B卻沒收到(這就是非一致性)。
隔離性(isolation)。一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對并發的其他事務是隔離的,并發執行的各個事務之間不能互相干擾。比如A和C同時向B轉賬,那B同一時間只能和一個人交易(同時只能有一個交易在執行)。
持久性(durability)。持久性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。A向B轉賬,成功以后B的賬戶就存入了轉賬數額,在不做其他的操作前提下數據是永久性的。
二、Hibernate事務處理
(1)Hibernate事務處理
在Hibernate框架中,使用Transaction接口來維護了事務實現(JTA,JDBC)的抽象。
事務與Session相關聯,并通過調用session.beginTransaction()實例化。
Transaction接口的方法如下:
void begin() 開始一個新的事務。
void commit() 結束工作單位,在FlushMode.NEVER中除外。
void rollback() 強制此事務回滾。
void setTimeout(int seconds) 它為由此實例開始的后續調用啟動的任何事務設置事務超時。
boolean isAlive() 檢查交易是否仍然存在。
void registerSynchronization(Synchronization s) 為此事務注冊用戶同步回調。
boolean wasCommited() 檢查事務是否成功提交。
boolean wasRolledBack() 檢查事務是否成功回滾。
(2)Hibernate事務綁定
Hibernate使用本地線程綁定事務(所以不能在一個線程中啟動多個線程去操作不同的數據工作),當請求Service方法時打開通過Soring AOP 自動打開 Hibernate Session,啟動事務,執行所有與數據相關的工作,結束事務并關閉Session。模式的關鍵是交易與交易之間的一對一關系 Session。
例子:
public Integer save(One one,Tow tow) { oneDao.save(one); towDao.save(tow); return 1; }
三、分布式事務
(1)JTA
在應用系統數據量越來越大時,系統數據就需要分布在不同的數據庫中,當業務需求在多個數據庫中做原子性操作時就可以選擇JTA (Java Transaction API),JTA事務比JDBC事務更強大。一個JTA事務可以有多個參與者,而一個JDBC事務則被限定在一個單一的數據庫連接。
(2)JTA原理
不同的數據庫有不同的數據庫供應商,JTA就是將這個不同的數據庫管理起來,統一創建一個原子事務,全部成功即成功,一個不成功就回滾所有的操作(JTA還是較重量級)
(3)實例
Spring有很多的JTA框架,這里使用的是atomikos框架,具體代碼請點擊鏈接查看
四、分布式消息最終一致性事務
(1)最終一致性
當應用系統數據越來越龐大,最終數據的一致性成為了一個很好的解決方案,即能即時響應,又能很好的完成多個數據操作(但不能保證一定成功,可能過了一段時間最終卻沒有成功)。
(2)實現原理
當應用收到請求,應用會先將用戶請求的數據保存到分布式消息中間件中,做一個保存操作。保存成功后就給用戶返回提交成功信息。接著分布式消息中間件將請求在發送到不同的處理機器上,處理機器收到消息在進行業務處理。比如A給B轉賬,A先提交轉賬信息(已經扣款),然后消息被發送的分布式消息中間件上,消息中間件在發送到處理機器上面做處理,轉賬成功后則在給用戶發送轉賬成功信息,不成功則把款退回去。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71536.html
摘要:事務隔離級別圖文詳解什么是事務事務是邏輯上的一組操作,要么都執行,要么都不執行。可串行化最高的隔離級別,完全服從的隔離級別。存儲引擎在分布式事務的情況下一般會用到可串行化隔離級別。回滾會結束用戶的事務,并撤銷正在進行的所有未提交的修改。 該文已加入筆主的開源項目——JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識的文檔類項目),地址:https://github.c...
摘要:事務隔離級別定義了一個事務可能受其他并發事務影響的程度我們先來看一下并發事務帶來的問題,然后再來介紹一下接口中定義了五個表示隔離級別的常量。 Java面試通關手冊(Java學習指南):https://github.com/Snailclimb/Java_Guide 微信閱讀地址鏈接:可能是最漂亮的Spring事務管理詳解 事務概念回顧 什么是事務? 事務是邏輯上的一組操作,要么都執行,...
閱讀 3454·2021-11-22 12:00
閱讀 671·2019-08-29 13:24
閱讀 2905·2019-08-29 11:31
閱讀 2587·2019-08-26 14:00
閱讀 3185·2019-08-26 11:42
閱讀 2476·2019-08-23 18:31
閱讀 798·2019-08-23 18:27
閱讀 2844·2019-08-23 16:58