新聞中心
這篇文章主要講解了“Spring中事務(wù)的傳播行為說明以及怎么對事務(wù)進(jìn)行管理”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Spring中事務(wù)的傳播行為說明以及怎么對事務(wù)進(jìn)行管理”吧!
龍海ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
當(dāng)我們在spring中調(diào)用Service中一個方法時,如果我們默認(rèn)配置了對Service的事務(wù)管理,那么此時的Service將運(yùn)行在一個由spring管理的事務(wù)環(huán)境中。由于在我們?nèi)粘5拈_發(fā)時,通常會在一個Service接口中調(diào)用其它Service中的接口以此來完成一個完整的事務(wù)操作,這時就會發(fā)生服務(wù)接口嵌套調(diào)用的情況,spring通過事務(wù)傳播行為控制當(dāng)前事務(wù)如何傳播到被嵌套調(diào)用的目標(biāo)服務(wù)接口方法中的。下面我們想想了解一下在spring中都有哪些不同的事務(wù)傳播行為,以前它們的區(qū)別。
spring在TransactionDefinition接口中定義了7種類型的事務(wù)傳播行為,它們具體的區(qū)別如下:
事務(wù)傳播行為說明
PROPAGATION_REQUIRED:如果當(dāng)前沒有事務(wù),那就新建一個新的事務(wù),如果已經(jīng)存在一個事務(wù),那就加入到這個事務(wù)中。
PROPAGATION_SUPPORTS:支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就以非事務(wù)方法執(zhí)行。
PROPAGATION_MANDATORY:使用當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),則就拋出異常。
PROPAGATION_REQUIRES_NEW:新建事務(wù),如果當(dāng)前存在事務(wù),則把當(dāng)前事務(wù)掛起。
PROPAGATION_NOT_SUPPORTED:以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),則把當(dāng)前事務(wù)掛起。
PROPAGATION_NEVER:以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常
PROPAGATION_NESTED:如果當(dāng)前存在事務(wù),則在嵌套事務(wù)內(nèi)執(zhí)行,如果當(dāng)前沒有事務(wù),則執(zhí)行與PROPAGATION_REQUIRED類似的操作。
備注:當(dāng)使有PROPAGATION_NESTED時,底層的數(shù)據(jù)源必須基于JDBC3.0,并且實(shí)現(xiàn)者需要支持保存點(diǎn)事務(wù)機(jī)制。
我們在實(shí)際開發(fā)時,基本不會通過編碼的方式來進(jìn)行事務(wù)管理,因?yàn)檫@樣很不方便管理,在實(shí)際的開發(fā)中我們一般會采用xml的方法或者注解的方法來進(jìn)行事務(wù)管理。雖然我們不會直接采用編碼的方法進(jìn)行事務(wù)管理,但在spring中還是提供了對該方法的支持。我們可以直接使用spring為我們提供的TransactionTemplate模板類來執(zhí)行我們用編碼的方式對事務(wù)進(jìn)行管理。下面我們簡單了解一下TransactionTemplate模板類的主要方法。
下面我們通過一個簡單的測試用例來看一下到底怎么用ransactionTemplate模板類通過編碼的方法進(jìn)行事務(wù)管理。
由于spring事務(wù)管理器TransactionSynchronizationManager進(jìn)行工作,所以如果在回調(diào)接口方法中需要顯示的訪問數(shù)據(jù)庫連接,必須通過資源獲取工具類得到線程綁定的數(shù)據(jù)連接,因?yàn)檫@是spring事務(wù)管理的底層協(xié)議。如果DAO接口是基于spring提供的模板類創(chuàng)建的,由于模板類已經(jīng)在內(nèi)部使用了資源獲取工具類獲取數(shù)據(jù)庫連接,所以用戶就不必關(guān)心底層數(shù)據(jù)連接的獲取問題了。
上面我們提到過,在我們?nèi)粘i_發(fā)時,不是會采用用編碼的方式管理事務(wù)的,我們基本上會采用聲明式事務(wù)管理功能,因?yàn)檫@種方式可以讓事務(wù)管理代碼完全從業(yè)務(wù)代碼中解耦。在spring中聲明式事務(wù)管理是通過spring AOP的功能實(shí)現(xiàn)的。具體的流程是通過事務(wù)的聲明信息,spring負(fù)責(zé)將事務(wù)管理增強(qiáng)邏輯動態(tài)織入到業(yè)務(wù)方法的相應(yīng)連接點(diǎn)中。下面我們通過xml代碼的方法來管理事務(wù)。
UserDao接口中有兩個方法,我們可以對對save方法添加寫的事務(wù)能力,而對getUserInfo方法添加讀事務(wù)能力。
我們可以看到,采用xml管理事務(wù)和直接用編碼的方法有很大的不同的,在接口的實(shí)現(xiàn)類中只有相關(guān)的業(yè)務(wù)代碼,并不會有任何相關(guān)事務(wù)的代碼,而用直接編碼的方法則必須手動的將管理事務(wù)的代碼編寫在接口的實(shí)現(xiàn)類中。在spring中可以用兩種方式來通過xml管理事務(wù),一種方式是TransactionProxyFactoryBean的方式來進(jìn)行事務(wù)管理,還有一種方式是通過tx的方式來管理事務(wù),因?yàn)門ransactionProxyFactoryBean的方式spring官網(wǎng)中已經(jīng)不推薦使用了,所以,我們下面的測試用例將采用用tx的方式來管理事務(wù)。
感謝各位的閱讀,以上就是“Spring中事務(wù)的傳播行為說明以及怎么對事務(wù)進(jìn)行管理”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Spring中事務(wù)的傳播行為說明以及怎么對事務(wù)進(jìn)行管理這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
當(dāng)前文章:Spring中事務(wù)的傳播行為說明以及怎么對事務(wù)進(jìn)行管理
標(biāo)題路徑:http://fisionsoft.com.cn/article/ipdioh.html