java事務(wù)的概念淺析
事務(wù),一般是指要做的或所做的事情。在計算機術(shù)語中是指訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項的一個程序執(zhí)行單元(unit)。事務(wù)(Transaction)是訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項的一個程序執(zhí)行單元(unit)。事務(wù)通常由高級數(shù)據(jù)庫操縱語言或編程語言(如SQL,C++或Java)書寫的用戶程序的執(zhí)行所引起,并用形如begin transaction和end transaction語句(或函數(shù)調(diào)用)來界定。事務(wù)由事務(wù)開始(begin transaction)和事務(wù)結(jié)束(end transaction)之間執(zhí)行的全體操作組成。
一個Java應(yīng)用系統(tǒng),如果要操作數(shù)據(jù)庫,則通過JDBC來實現(xiàn)的。增加、修改、刪除都是通過相應(yīng)方法間接來實現(xiàn)的,事務(wù)的控制也相應(yīng)轉(zhuǎn)移到Java程序代碼中。因此,數(shù)據(jù)庫操作的事務(wù)習慣上就稱為Java事務(wù)。
1、事務(wù)的特性事務(wù)必須服從ISO/IEC所制定的ACID原則。ACID是原子性(atomicity)、一致性(consistency)、隔離性 (isolation)和持久性(durability)的縮寫。
原子性(atomicity):事務(wù)是數(shù)據(jù)庫的邏輯工作單位,而且是必須是原子工作單位,對于其數(shù)據(jù)修改,要么全部執(zhí)行,要么全部不執(zhí)行。比如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ù)所影響。比如A和C同時向B轉(zhuǎn)賬,那B同一時間只能和一個人交易(同時只能有一個交易在執(zhí)行)。
持久性(durability):一個事務(wù)一旦提交,事物的操作便永久性的保存在DB中。即使此時再執(zhí)行回滾操作也不能撤消所做的更改。A向B轉(zhuǎn)賬,成功以后B的賬戶就存入了轉(zhuǎn)賬數(shù)額,在不做其他的操作前提下數(shù)據(jù)是永久性的。
2、事務(wù)的隔離級別串行化,Serializable,一個事務(wù)在執(zhí)行過程中完全看不到其他事務(wù)對數(shù)據(jù)庫所做的更新。
可重復(fù)讀,Repeatable Read,一個事務(wù)在執(zhí)行過程中可以看到其他事務(wù)已經(jīng)提交的記錄,但是不能看到其他事務(wù)對已有記錄的更新。
讀已提交數(shù)據(jù),Read Commited,一個事務(wù)在執(zhí)行過程中可以看到其他事務(wù)已經(jīng)提交的記錄,而且能看到其他事務(wù)對已有記錄的更新。
讀未提交數(shù)據(jù),Read UnCommited,一個事務(wù)在執(zhí)行過程中可以看到其他事務(wù)沒有提交的記錄,而且能看到其他事務(wù)沒有提交的記錄的更新。
隔離級別越高,越能保證數(shù)據(jù)的完整性和一致性,但對高并發(fā)性能影響也越大,故需要合理選擇。
3、Java中的事務(wù)處理一般情況下,J2EE應(yīng)用服務(wù)器支持JDBC事務(wù)、JTA(Java Transaction API)事務(wù)、容器管理事務(wù)。一般情況下,最好不要在程序中同時使用上述三種事務(wù)類型,比如在JTA事務(wù)中嵌套JDBC事務(wù)。第二方面,事務(wù)要在盡可能短的時間內(nèi)完成,不要在不同方法中實現(xiàn)事務(wù)的使用。
到此這篇關(guān)于java事務(wù)的概念淺析的文章就介紹到這了,更多相關(guān)java里面有事務(wù)的概念嗎內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章: