亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Spring中的事務(wù)控制

Vixb / 416人閱讀

摘要:中的事務(wù)控制方式編程式事務(wù)管理通過手動編碼控制事務(wù)的邊界,可以實現(xiàn)細(xì)粒度的事務(wù)控制,一般用的較少。隔離級別控制并發(fā)訪問下數(shù)據(jù)庫的安全性。內(nèi)部事務(wù)的回滾不會對外部事務(wù)造成影響??赡軐?dǎo)致臟幻不可重復(fù)讀允許在并發(fā)事務(wù)已經(jīng)提交后讀取。

1.事務(wù)的概念

事務(wù)是一組操作的執(zhí)行單元,相對于數(shù)據(jù)庫的單條操作而言,事務(wù)管理的是一組SQL指令,如增刪改查等,事務(wù)的特性體現(xiàn)在事務(wù)內(nèi)包含的SQL指令必須全部執(zhí)行成功,如果其中一條指令發(fā)生錯誤,那么整個事務(wù)內(nèi)的一組操作都要進(jìn)行回滾。

事務(wù)有四個特性:

原子性 Atomic ,事務(wù)是一個不可再拆分的最小單位,要么整個執(zhí)行,要么整個回滾.

一致性 Consistent,事務(wù)要保證數(shù)據(jù)庫整體數(shù)據(jù)的完整性和業(yè)務(wù)的數(shù)據(jù)的一致性,事務(wù)成功提交整體數(shù)據(jù)修改,事務(wù)錯誤則回滾到數(shù)據(jù)回到原來的狀態(tài)。

隔離性 Isolate,兩個事務(wù)的執(zhí)行都是獨(dú)立的,事務(wù)之前不會相互影響,多個事務(wù)操作一個對象時會以串行等待的方式保證事務(wù)相互之間處于隔離。

持久性 Durable,一旦事務(wù)成功提交后,數(shù)據(jù)將會保存到數(shù)據(jù)庫,不能再進(jìn)行回滾,以后的操作都將在當(dāng)前數(shù)據(jù)庫狀態(tài)上繼續(xù)進(jìn)行。

2.Spring中的事務(wù)控制方式

編程式事務(wù)管理
通過手動編碼控制事務(wù)的邊界,可以實現(xiàn)細(xì)粒度的事務(wù)控制,一般用的較少。

聲明式事務(wù)管理
只需要在Spring中添加一些配置文件或者使用注解,即可實現(xiàn)將操作納入事務(wù)管理中,事務(wù)管理使用了Spring AOP,降低了代碼之間的耦合。

3.事務(wù)管理器

Spring中并沒有直接管理事務(wù),而是將管理事務(wù)委托給相應(yīng)的持久化機(jī)制提供的某個特定平臺的實現(xiàn)。

事務(wù)管理器實現(xiàn) 目標(biāo)
org.springframework.jdbc.datasource.DataSourceTransactionManager 在單一的JDBC Datasource中管理事務(wù)
org.springframework.orm.hibernate5.HibernateTransactionManager 當(dāng)持久化機(jī)制是hibernate時,用它來管理事務(wù)
org.springframework.jdo.JdoTransactionManager 當(dāng)持久化機(jī)制是Jdo時,用它來管理事務(wù)
org.springframework.transaction.jta.JtaTransactionManager 使用一個JTA實現(xiàn)來管理事務(wù)。在一個事務(wù)跨越多個資源時必須使用
org.springframework.orm.ojb.PersistenceBrokerTransactionManager 當(dāng)apache的ojb用作持久化機(jī)制時,用它來管理事務(wù)
4.事務(wù)屬性簡介

Spring關(guān)于事務(wù)的注解中有以下幾個屬性(部分)

@Transactional(
            readOnly = false, //讀寫事務(wù)
            timeout = -1,     //超時
            noRollbackFor = ArithmeticException.class  //遇到數(shù)學(xué)異常不回滾
            isolation = Isolation.REPEATABLE_READ,  //事務(wù)隔離級別
            propagation = Propagation.REQUIRED      //事務(wù)傳播規(guī)則
    )

是否為只讀事務(wù):只讀事務(wù)不做任何修改,可以優(yōu)化查詢操作。

事務(wù)超時(單位為秒):事務(wù)的最長持續(xù)時間,如果該時間內(nèi)事務(wù)一直沒有操作或回滾,則系統(tǒng)將自動進(jìn)行回滾。-1表示不超時,但最終實現(xiàn)需要由底層數(shù)據(jù)庫實現(xiàn)。

隔離級別:控制并發(fā)訪問下數(shù)據(jù)庫的安全性。

傳播規(guī)則:定義事務(wù)方法和調(diào)用事務(wù)方法的方法之間的事務(wù)邊界。

5.事務(wù)傳播規(guī)則
傳播行為 意義
REQUIRED 業(yè)務(wù)方法需要在一個事務(wù)中運(yùn)行。如果方法運(yùn)行時,已經(jīng)處在一個事務(wù)中,那么加入到該事務(wù),否則為自己創(chuàng)建一個新的事務(wù)
NOT_SUPPORTED 聲明方法不需要事務(wù)。如果方法沒有關(guān)聯(lián)到一個事務(wù),容器不會為它開啟事務(wù)。如果方法在一個事務(wù)中被調(diào)用,該事務(wù)會被掛起,在方法調(diào)用結(jié)束后,原先的事務(wù)便會恢復(fù)執(zhí)行
REQUIRES_NEW 屬性表明不管是否存在事務(wù),業(yè)務(wù)方法總會為自己發(fā)起一個新的事務(wù)。如果方法已經(jīng)運(yùn)行在一個事務(wù)中,則原有事務(wù)會被掛起,新的事務(wù)會被創(chuàng)建,直到方法執(zhí)行結(jié)束,新事務(wù)才算結(jié)束,原先的事務(wù)才會恢復(fù)執(zhí)行
MANDATORY 該屬性指定業(yè)務(wù)方法只能在一個已經(jīng)存在的事務(wù)中執(zhí)行,業(yè)務(wù)方法不能發(fā)起自己的事務(wù)。如果業(yè)務(wù)方法在沒有事務(wù)的環(huán)境下調(diào)用,容器就會拋出異常
SUPPORTS 這一事務(wù)屬性表明,如果業(yè)務(wù)方法在某個事務(wù)范圍內(nèi)被調(diào)用,則方法成為該事務(wù)的一部分。如果業(yè)務(wù)方法在事務(wù)范圍外被調(diào)用,則方法在沒有事務(wù)的環(huán)境下執(zhí)行
NEVER 指定業(yè)務(wù)方法絕對不能在事務(wù)范圍內(nèi)執(zhí)行。如果業(yè)務(wù)方法在某個事務(wù)中執(zhí)行,容器會拋出異常,只有業(yè)務(wù)方法沒有關(guān)聯(lián)到任何事務(wù),才能正常執(zhí)行
NESTED 如果一個活動的事務(wù)存在,則運(yùn)行在一個嵌套的事務(wù)中. 如果沒有活動事務(wù), 則按REQUIRED屬性執(zhí)行.它使用了一個多帶帶的事務(wù), 這個事務(wù)擁有多個可以回滾的保存點。內(nèi)部事務(wù)的回滾不會對外部事務(wù)造成影響。它只對DataSourceTransactionManager事務(wù)管理器起效
6.事務(wù)隔離級別
隔離級別 意義
DEFAULT 默認(rèn)的隔離級別
READ_UNCOMMITED 允許你讀取還未提交的改變了的數(shù)據(jù)??赡軐?dǎo)致臟、幻、不可重復(fù)讀
READ_COMMITTED 允許在并發(fā)事務(wù)已經(jīng)提交后讀取??煞乐古K讀,但幻讀和 不可重復(fù)讀仍可發(fā)生
REPEATABLE_READ 對相同字段的多次讀取是一致的,除非數(shù)據(jù)被事務(wù)本身改變??煞乐古K、不可重復(fù)讀,但幻讀仍可能發(fā)生
SERIALIZABLE 完全服從事務(wù)ACID的隔離級別,確保不發(fā)生臟、幻、不可重復(fù)讀。這在所有的隔離級別中是最慢的,它是典型的通過完全鎖定在事務(wù)中涉及的數(shù)據(jù)表來完成的

不同的隔離級別采用不同的方式來實現(xiàn),在四種隔離級別中,Serializable的隔離級別最高,Read Uncommited的隔離級別最低。

大多數(shù)據(jù)庫默認(rèn)的隔離級別為Read Commited,如SqlServer,Oracle

當(dāng)然也有少部分?jǐn)?shù)據(jù)庫默認(rèn)的隔離級別為Repeatable_Read ,如Mysql,

Oracle數(shù)據(jù)庫支持READ COMMITTED和SERIALIZABLE兩種事務(wù)隔離性級別,不支持READ UNCOMMITTED和REPEATABLE READ這兩種隔離性級別。雖然SQL標(biāo)準(zhǔn)定義的默認(rèn)事務(wù)隔離性級別是SERIALIZABLE,但是Oracle數(shù)據(jù)庫默認(rèn)使用的事務(wù)隔離性級別卻是READ COMMITTED.

7.相關(guān)資料

臟讀、不可重復(fù)讀、幻讀區(qū)別

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

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

相關(guān)文章

  • Spring【DAO模塊】就是這么簡單

    摘要:連接對象執(zhí)行命令對象執(zhí)行關(guān)閉值得注意的是,對數(shù)據(jù)庫連接池是有很好的支持的。給我們提供了事務(wù)的管理器類,事務(wù)管理器類又分為兩種,因為的事務(wù)和的事務(wù)是不一樣的。 前言 上一篇Spring博文主要講解了如何使用Spring來實現(xiàn)AOP編程,本博文主要講解Spring的DAO模塊對JDBC的支持,以及Spring對事務(wù)的控制... 對于JDBC而言,我們肯定不會陌生,我們在初學(xué)的時候肯定寫過非...

    NSFish 評論0 收藏0
  • 15個經(jīng)典的Spring面試常見問題

    摘要:我自己總結(jié)的學(xué)習(xí)的系統(tǒng)知識點以及面試問題,已經(jīng)開源,目前已經(jīng)。目前最新的版本中模塊的組件已經(jīng)被廢棄掉,同時增加了用于異步響應(yīng)式處理的組件。每一次請求都會產(chǎn)生一個新的,該僅在當(dāng)前內(nèi)有效。顯而易見,這種模式存在很多問題。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識點以及面試問題,已經(jīng)開源,目前已經(jīng) 41k+ Star。會一直完善下去,歡迎建議和指導(dǎo),同時也歡迎Star: https://githu...

    sarva 評論0 收藏0
  • SSH框假中spring充當(dāng)了管理容器的角色

    摘要:在框假中充當(dāng)了管理容器的角色。中也有對事務(wù)的管理,中事務(wù)管理是通過創(chuàng)建和維護(hù)來完成。這也就是所謂控制反轉(zhuǎn)的概念所在依賴控制權(quán)由應(yīng)用代碼中轉(zhuǎn)到了外部容器,控制權(quán)的轉(zhuǎn)移,是所謂反轉(zhuǎn)。 在SSH框假中spring充當(dāng)了管理容器的角色。我們都知道Hibernate用來做持久層,因為它將JDBC做了一個良好的封裝,程序員在與數(shù)據(jù)庫進(jìn)行交互時可以不用書寫大量的SQL語句。Struts是用來做應(yīng)用層...

    WrBug 評論0 收藏0
  • Spring Cloud 分布式事務(wù)管理

    摘要:中大致分為兩部分事務(wù)管理器和本地資源管理器。具體實現(xiàn)分布式事務(wù)框架的核心功能是對本地事務(wù)的協(xié)調(diào)控制,框架本身并不創(chuàng)建事務(wù),只是對本地事務(wù)做協(xié)調(diào)控制。 Spring Cloud 分布式事務(wù)管理 在微服務(wù)如火如荼的情況下,越來越多的項目開始嘗試改造成微服務(wù)架構(gòu),微服務(wù)即帶來了項目開發(fā)的方便性,又提高了運(yùn)維難度以及網(wǎng)絡(luò)不可靠的概率. @[toc]在說微服務(wù)的優(yōu)缺點時,有對比才會更加明顯,首先...

    aboutU 評論0 收藏0

發(fā)表評論

0條評論

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