亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

淺談spring中isolation和propagation的用法

瀏覽:20日期:2023-08-26 18:12:08

可以在XML文件中進行配置,下面的代碼是個示意代碼

<tx:advice transaction-manager='txManager'> <tx:attributes> <tx:method name='add*' propagation='REQUIRED' isolation='READ_COMMITTED'/>增加記錄的方法 <tx:method name='get*' propagation='REQUIRED' isolation='READ_COMMITTED'/>獲取記錄的方法 <tx:method name='delete*' propagation='REQUIRED' isolation='READ_COMMITTED'/>刪除的方法 <tx:method name='update*' propagation='REQUIRED' isolation='SERIALIZABLE'/>更改記錄的方法 </tx:attributes> </tx:advice>

下面擴展將一下spring里面事務(wù)的傳播屬性和事務(wù)隔離級別。

一、Propagation (事務(wù)的傳播屬性)

Propagationkey屬性確定代理應(yīng)該給哪個方法增加事務(wù)行為。這樣的屬性最重要的部份是傳播行為。有以下選項可供使用:

傳播行為

事務(wù)的第一個方面是傳播行為。傳播行為定義關(guān)于客戶端和被調(diào)用方法的事務(wù)邊界。Spring定義了7中傳播行為。

傳播行為 意義 PROPAGATION_REQUIRES 表示當前方法必須在一個事務(wù)中運行。如果一個現(xiàn)有事務(wù)正在進行中,該方法將在那個事務(wù)中運行,否則就要開始一個新事務(wù)。 PROPAGATION_SUPPORTS 表示當前方法不需要事務(wù)性上下文,但是如果有一個事務(wù)已經(jīng)在運行的話,它也可以在這個事務(wù)里運行。 PROPAGATION_MANDATORY 表示該方法必須運行在一個事務(wù)中。如果當前沒有事務(wù)正在發(fā)生,將拋出一個異常。 PROPAGATION_REQUIRES_NEW 表示當前方法必須在它自己的事務(wù)里運行。一個新的事務(wù)將被啟動,而且如果有一個現(xiàn)有事務(wù)在運行的話,則將在這個方法運行期間被掛起。 PROPAGATION_NOT_SUPPORTED 表示當前方法不需要事務(wù)性上下文,但是如果有一個事務(wù)已經(jīng)在運行的話,它也可以在這個事務(wù)里運行。 PROPAGATION_NEVER 表示當前的方法不應(yīng)該在一個事務(wù)中運行。如果一個事務(wù)正在進行,則會拋出一個異常。 PROPAGATION_NESTED 表示如果當前正有一個事務(wù)在進行中,則該方法應(yīng)當運行在一個嵌套式事務(wù)中。被嵌套的事務(wù)可以獨立于封裝事務(wù)進行提交或回滾。如果封裝事務(wù)不存在,行為就像PROPAGATION_REQUIRES一樣。

傳播規(guī)則回答了這樣一個問題,就是一個新的事務(wù)應(yīng)該被啟動還是被掛起,或者是一個方法是否應(yīng)該在事務(wù)性上下文中運行。

隔離級別

聲明式事務(wù)的第二個方面是隔離級別。隔離級別定義一個事務(wù)可能受其他并發(fā)事務(wù)活動活動影響的程度。另一種考慮一個事務(wù)的隔離級別的方式,是把它想象為那個事務(wù)對于事物處理數(shù)據(jù)的自私程度。

在一個典型的應(yīng)用程序中,多個事務(wù)同時運行,經(jīng)常會為了完成他們的工作而操作同一個數(shù)據(jù)。并發(fā)雖然是必需的,但是會導(dǎo)致一下問題:

臟讀(Dirty read)-- 臟讀發(fā)生在一個事務(wù)讀取了被另一個事務(wù)改寫但尚未提交的數(shù)據(jù)時。如果這些改變在稍后被回滾了,那么第一個事務(wù)讀取的數(shù)據(jù)就會是無效的。 不可重復(fù)讀(Nonrepeatable read)-- 不可重復(fù)讀發(fā)生在一個事務(wù)執(zhí)行相同的查詢兩次或兩次以上,但每次查詢結(jié)果都不相同時。這通常是由于另一個并發(fā)事務(wù)在兩次查詢之間更新了數(shù)據(jù)。 幻影讀(Phantom reads)-- 幻影讀和不可重復(fù)讀相似。當一個事務(wù)(T1)讀取幾行記錄后,另一個并發(fā)事務(wù)(T2)插入了一些記錄時,幻影讀就發(fā)生了。在后來的查詢中,第一個事務(wù)(T1)就會發(fā)現(xiàn)一些原來沒有的額外記錄。

在理想狀態(tài)下,事務(wù)之間將完全隔離,從而可以防止這些問題發(fā)生。然而,完全隔離會影響性能,因為隔離經(jīng)常牽扯到鎖定在數(shù)據(jù)庫中的記錄(而且有時是鎖定完整的數(shù)據(jù)表)。侵占性的鎖定會阻礙并發(fā),要求事務(wù)相互等待來完成工作。

考慮到完全隔離會影響性能,而且并不是所有應(yīng)用程序都要求完全隔離,所以有時可以在事務(wù)隔離方面靈活處理。因此,就會有好幾個隔離級別。

隔離級別 含義 ISOLATION_DEFAULT 使用后端數(shù)據(jù)庫默認的隔離級別。 ISOLATION_READ_UNCOMMITTED 允許讀取尚未提交的更改。可能導(dǎo)致臟讀、幻影讀或不可重復(fù)讀。 ISOLATION_READ_COMMITTED 允許從已經(jīng)提交的并發(fā)事務(wù)讀取。可防止臟讀,但幻影讀和不可重復(fù)讀仍可能會發(fā)生。 ISOLATION_REPEATABLE_READ 對相同字段的多次讀取的結(jié)果是一致的,除非數(shù)據(jù)被當前事務(wù)本身改變。可防止臟讀和不可重復(fù)讀,但幻影讀仍可能發(fā)生。  ISOLATION_SERIALIZABLE 完全服從ACID的隔離級別,確保不發(fā)生臟讀、不可重復(fù)讀和幻影讀。這在所有隔離級別中也是最慢的,因為它通常是通過完全鎖定當前事務(wù)所涉及的數(shù)據(jù)表來完成的。

只讀

聲明式事務(wù)的第三個特性是它是否是一個只讀事務(wù)。如果一個事務(wù)只對后端數(shù)據(jù)庫執(zhí)行讀操作,那么該數(shù)據(jù)庫就可能利用那個事務(wù)的只讀特性,采取某些優(yōu)化 措施。通過把一個事務(wù)聲明為只讀,可以給后端數(shù)據(jù)庫一個機會來應(yīng)用那些它認為合適的優(yōu)化措施。由于只讀的優(yōu)化措施是在一個事務(wù)啟動時由后端數(shù)據(jù)庫實施的, 因此,只有對于那些具有可能啟動一個新事務(wù)的傳播行為(PROPAGATION_REQUIRES_NEW、PROPAGATION_REQUIRED、 ROPAGATION_NESTED)的方法來說,將事務(wù)聲明為只讀才有意義。

此外,如果使用Hibernate作為持久化機制,那么把一個事務(wù)聲明為只讀,將使Hibernate的flush模式被設(shè)置為FLUSH_NEVER。這就告訴Hibernate避免和數(shù)據(jù)庫進行不必要的對象同步,從而把所有更新延遲到事務(wù)的結(jié)束。

事務(wù)超時

為了使一個應(yīng)用程序很好地執(zhí)行,它的事務(wù)不能運行太長時間。因此,聲明式事務(wù)的下一個特性就是它的超時。

假設(shè)事務(wù)的運行時間變得格外的長,由于事務(wù)可能涉及對后端數(shù)據(jù)庫的鎖定,所以長時間運行的事務(wù)會不必要地占用數(shù)據(jù)庫資源。這時就可以聲明一個事務(wù)在特定秒數(shù)后自動回滾,不必等它自己結(jié)束。

由于超時時鐘在一個事務(wù)啟動的時候開始的,因此,只有對于那些具有可能啟動一個新事務(wù)的傳播行為(PROPAGATION_REQUIRES_NEW、PROPAGATION_REQUIRED、ROPAGATION_NESTED)的方法來說,聲明事務(wù)超時才有意義。

回滾規(guī)則

事務(wù)五邊形的對后一個邊是一組規(guī)則,它們定義哪些異常引起回滾,哪些不引起。在默認設(shè)置下,事務(wù)只在出現(xiàn)運行時異常(runtime exception)時回滾,而在出現(xiàn)受檢查異常(checked exception)時不回滾(這一行為和EJB中的回滾行為是一致的)。

不過,也可以聲明在出現(xiàn)特定受檢查異常時像運行時異常一樣回滾。同樣,也可以聲明一個事務(wù)在出現(xiàn)特定的異常時不回滾,即使那些異常是運行時一場。

到此這篇關(guān)于淺談spring中isolation 和propagation的用法的文章就介紹到這了,更多相關(guān)spring isolation propagation內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 色综合久久98天天综合 | 欧美三级手机在线 | 亚洲欧美另类日本久久影院 | 国产精品视频一区二区噜噜 | 国产91av视频在线观看 | 欧美一级高清毛片aaa | 99爱在线精品视频免费观看9 | 久草青青| 国产精品青草久久久久福利99 | 精品日韩一区 | 中文字幕乱码一区三区免费 | 操操综合 | 美国一级黄色 | 亚洲 欧洲 日产 专区 | 中文字幕日韩精品在线 | 大陆三级特黄在线播放 | 免费观看国产一区二区三区 | 青青久久久 | 亚洲与黑人 | 欧美一区二区三区精品国产 | 久久久精品2021免费观看 | 国产激情一区二区三区成人91 | 草草影院ccyy免费看片 | 色佬在线 | 美女成人私密视频 | 欧美成人看片一区二区三区 | 国产影视精选网站 | 国产精品v欧美精品v日韩精品 | 中文字幕无线码一区二区三区 | 日本一级片在线观看 | 国产精品亚洲一区在线播放 | 青青草青青操 | 在线观看黄色一级片 | 国内一区二区三区精品视频 | 成年人黄色小视频 | 日韩精品一区二区三区四区 | 高清视频一区 | 99九九精品| 9久re在线观看视频精品 | 露脸在线 | 欧美一级二级毛片视频 |