歡迎加入翻譯小組。轉(zhuǎn)載請見文末要求。本文將深入研究Sp">
spring@transactional工作原理-java開發(fā)java經(jīng)驗技巧

spring@transactional工作原理-java開發(fā)java經(jīng)驗技巧

ID:30778559

大?。?9.72 KB

頁數(shù):6頁

時間:2019-01-03

spring@transactional工作原理-java開發(fā)java經(jīng)驗技巧_第1頁
spring@transactional工作原理-java開發(fā)java經(jīng)驗技巧_第2頁
spring@transactional工作原理-java開發(fā)java經(jīng)驗技巧_第3頁
spring@transactional工作原理-java開發(fā)java經(jīng)驗技巧_第4頁
spring@transactional工作原理-java開發(fā)java經(jīng)驗技巧_第5頁
資源描述:

《spring@transactional工作原理-java開發(fā)java經(jīng)驗技巧》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、Spring@Transactional工作原理-編程開發(fā)技術(shù)Spring?Transactional工作原理木文由ImportNew?hejiani翻譯自javacodegeeks<>歡迎加入翻譯小組。轉(zhuǎn)載請見文末要求。本文將深入研究Spring的事務(wù)管理。主要介紹transactioneil在底層是如何工作的。Z后的文章將介紹:?propagation(事務(wù)傳播)和isolation(隔離性)等屬性的使用?事務(wù)使用的陷阱有哪些以及如何避免JPA和事務(wù)管理很重要的一點是JPA木身并不提供任何類型的聲明式事務(wù)管理。如杲在依賴注入容器Z外使用JPA,事

2、務(wù)處理必須由開發(fā)人員編程實現(xiàn)。UserTransactionutx=entiLyManager.getTransaction();try{utx.begin();businessLogic();utx.commit();}catch(Exceptionex){utx.rollback();throwex;}這種方式的事務(wù)管理使事務(wù)范圍可以在代碼屮很清晰地表達出來,但它冇以下缺占?7、、、??容易出現(xiàn)重復代碼和錯誤?任何錯謀可能產(chǎn)生較人的影響?錯課難以調(diào)試和復現(xiàn)?降低了代碼庫的可讀性?如果該方法調(diào)用了其他的事務(wù)方法如何處理呢?使用Spring@Tran

3、sactional使用Spring?Transactional,上面的代碼就簡化為:@TransactionalpublicvoidbusinessLogic(){...useentitymanagerinsideatransaction???代碼更加簡潔,可讀性更好,也是目前Spring中事務(wù)處理的推薦方式。通過使用?Transactional,事務(wù)傳播等很多重要方面可以自動處理。這種情況下如果businessLogic()調(diào)用了其他事務(wù)方法,該方法將根據(jù)選項確定如何加入正在運行事務(wù)。這個強大機制的一個潛在缺點是它隱藏了底層的運行,當它不能正常工作

4、時很難調(diào)試。?Transactional含義關(guān)于?Transactional,關(guān)鍵點之一是要考慮兩個獨立的概念,它們都冇各自的范圍和生命周期:?persistencecontext(持久化上下文)?databasetransaction(事務(wù))?Transactional木身定義了單個事務(wù)的范圍。這個事務(wù)在persistencecontext的范圍內(nèi)。JPA中的持久化上卜文是EntityManagcr,內(nèi)部實現(xiàn)使用了HibernateScssion(使用Hibernate作為持久化provider)。持久化上下文僅僅是一個同步對象,它記錄了有限集合的

5、Java對象的狀態(tài),并且保證這些對象的變化最終持久化到數(shù)據(jù)庫。這是與單個事務(wù)非常不同的概念。一個EntityManager可以跨越多個事務(wù)使用,而且的確是這樣使用的。EntityManager何時跨越多個事務(wù)?最滋見的情況是應用使用OpenSessionTnView模式處理懶初始化異滋時,之前的文章介紹過這種做法的優(yōu)勢和劣勢。這種情況卜?視圖層運行的多個杳詢處于獨立的事務(wù)中,而不是單事務(wù)的業(yè)務(wù)邏輯,但這些查詢由相同的entitymanager管理。另一種情況是開發(fā)人員將持久化上下文標記為PersistenceContextType.EXTENDED,

6、這表示它能夠響應多個請求。如何定義EntityManager和Transaction之間的關(guān)系?這由應用開發(fā)者來選擇,但是JPAEntityManager最常用的方式是“EntityManagerperapplicationtransaction”(每個事務(wù)都有口己的實體管理器)模式。entitymanager注入的常用方法是:@PcrsistcnccContextprivateEntityManagerem;這里默認為"EntityManagerpertransactionn模式。這種模式下如果在?Transactional方法內(nèi)部使用該Entit

7、yManager,那么該方法將在單一事務(wù)中運行。@PersistenceContext如何工作?隨之而來的問題就是@PersistenceContext如何僅在容器啟動時注入entitymanager,假定entitymanager生命周期很短暫,而且每次請求需要多個entitymanagero答案是它不能:EntityManager是一個接口,注入到springbean屮的不是entitymanager本身,而是在運行時代理具體entitymanager的contextawareproxyC上下文感知代理)。通常用于代理的具體類為SharedEnt

8、ityManagerlnvocationHandler,借助調(diào)試器可以確認這一點。那么@Transactio

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。