Spring中propagation屬性的作用是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
成都創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、雅安網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5響應(yīng)式網(wǎng)站、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為雅安等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
在Spring的事務(wù)管理中,我們可以使用@Transactional來對事務(wù)進(jìn)行聲明式的設(shè)定。具體而言,就是在類或者方法前添加@Transactional并傳入屬性參數(shù)以獲取所需要的Transaction特性。Spring中的@Transactional有5個屬性:Propagation、Isolation、Rollback Rules、Timeout和Read-Only,其中Propagation屬性定義了Transaction的邊界 — 是否使用Transaction、在Transaction已存在的情況下如何表現(xiàn)等。
在service類前加上@Transactional,聲明這個service所有方法需要事務(wù)管理。每一個業(yè)務(wù)方法開始時都會打開一個事務(wù)。
Spring默認(rèn)情況下會對運行期例外(RunTimeException)進(jìn)行事務(wù)回滾。這個例外是unchecked,如果遇到checked意外就不回滾。
如何改變默認(rèn)規(guī)則:
1 讓checked例外也回滾:在整個方法前加上 @Transactional(rollbackFor=Exception.class)
2 讓unchecked例外不回滾: @Transactional(notRollbackFor=RunTimeException.class)
3 不需要事務(wù)管理的(只查詢的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)
在整個方法運行前就不會開啟事務(wù)
還可以加上:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true),這樣就做成一個只讀事務(wù),可以提高效率。
各種屬性的意義:
REQUIRED:業(yè)務(wù)方法需要在一個容器里運行。如果方法運行時,已經(jīng)處在一個事務(wù)中,那么加入到這個事務(wù),否則自己新建一個新的事務(wù)。
NOT_SUPPORTED:聲明方法不需要事務(wù)。如果方法沒有關(guān)聯(lián)到一個事務(wù),容器不會為他開啟事務(wù),如果方法在一個事務(wù)中被調(diào)用,該事務(wù)會被掛起,調(diào)用結(jié)束后,原先的事務(wù)會恢復(fù)執(zhí)行。
REQUIRESNEW:不管是否存在事務(wù),該方法總匯為自己發(fā)起一個新的事務(wù)。如果方法已經(jīng)運行在一個事務(wù)中,則原有事務(wù)掛起,新的事務(wù)被創(chuàng)建。
MANDATORY:該方法只能在一個已經(jīng)存在的事務(wù)中執(zhí)行,業(yè)務(wù)方法不能發(fā)起自己的事務(wù)。如果在沒有事務(wù)的環(huán)境下被調(diào)用,容器拋出例外。
SUPPORTS:該方法在某個事務(wù)范圍內(nèi)被調(diào)用,則方法成為該事務(wù)的一部分。如果方法在該事務(wù)范圍外被調(diào)用,該方法就在沒有事務(wù)的環(huán)境下執(zhí)行。
NEVER:該方法絕對不能在事務(wù)范圍內(nèi)執(zhí)行。如果在就拋例外。只有該方法沒有關(guān)聯(lián)到任何事務(wù),才正常執(zhí)行。
NESTED:如果一個活動的事務(wù)存在,則運行在一個嵌套的事務(wù)中。如果沒有活動事務(wù),則按REQUIRED屬性執(zhí)行。它使用了一個單獨的事務(wù),這個事務(wù)擁有多個可以回滾的保存點。內(nèi)部事務(wù)的回滾不會對外部事務(wù)造成影響。它只對DataSourceTransactionManager事務(wù)管理器起效。
Propagation屬性 | outMethod | innerMethod |
---|---|---|
Propagation.MANDATORY | 拋出異常 | 在outMethod的Transaction中運行 |
Propagation.NEVER | 不在Transaction中運行 | 拋出異常 |
Propagation.NOT_SUPPORTED | 不在Transaction中運行 | outMethod的Transaction暫停直至innerMethod執(zhí)行完畢 |
Propagation.REQUIRED ( 默認(rèn)值 ) | 新開一個Transaction并在其中運行 | 在outMethod的Transaction中運行 |
Propagation.REQUIRES_NEW | 新開一個Transaction并在其中運行 | outMethod的Transaction暫停直至innerMethod中新開的Transaction執(zhí)行完畢 |
Propagation.SUPPORTS | 不在Transaction中運行 | 在outMethod的Transaction中運行 |
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。
當(dāng)前題目:Spring中propagation屬性的作用是什么
本文鏈接:http://www.rwnh.cn/article40/gpoeho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、域名注冊、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站制作、自適應(yīng)網(wǎng)站、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)