摘要:事務(wù)管理結(jié)構(gòu)事務(wù)管理有個(gè)左右,其中最核心的有個(gè),分別是。事務(wù)管理主要結(jié)構(gòu)如下三個(gè)核心接口源碼解析接口是用于定義一個(gè)事務(wù),它定義了事務(wù)管理的五大屬性,在上一篇文章中有詳細(xì)介紹。只需要裝配一個(gè)實(shí)體管理工廠接口的任意實(shí)現(xiàn)。
1.Spring事務(wù)管理API結(jié)構(gòu)
??Spring事務(wù)管理API有100個(gè)左右,其中最核心的API有3個(gè),分別是TransactionDefinition、 ??PlatformTransactionManager、TransactionStatus。TransactionDefinition定義事務(wù)管理五個(gè)屬性,PlatformTransactionManager執(zhí)行具體的事務(wù),TransactionStatus提供控制事務(wù)執(zhí)行和查詢事務(wù)狀態(tài)的方法。Spring事務(wù)管理主要API結(jié)構(gòu)如下
? ?TransactionDefinition接口是用于定義一個(gè)事務(wù),它定義了Spring事務(wù)管理的五大屬性,在上一篇文章中有詳細(xì)介紹。Spring提供了一個(gè)該接口的默認(rèn)實(shí)現(xiàn)類DefaultTransactionDefinition,該類可用于大多數(shù)屬于管理情況。如果該類不能滿足需求,可以通過(guò)實(shí)現(xiàn)TransactionDefinition接口來(lái)定義自己的事務(wù)實(shí)現(xiàn)。TransactionDefinition接口源碼如下:
public interface TransactionDefinition { int PROPAGATION_REQUIRED = 0; int PROPAGATION_SUPPORTS = 1; int PROPAGATION_MANDATORY = 2; int PROPAGATION_REQUIRES_NEW = 3; int PROPAGATION_NOT_SUPPORTED = 4; int PROPAGATION_NEVER = 5; int PROPAGATION_NESTED = 6; int ISOLATION_DEFAULT = -1; int ISOLATION_READ_UNCOMMITTED = 1; int ISOLATION_READ_COMMITTED = 2; int ISOLATION_REPEATABLE_READ = 4; int ISOLATION_SERIALIZABLE = 8; int TIMEOUT_DEFAULT = -1; int getPropagationBehavior();//事務(wù)的傳播行為 int getIsolationLevel();//事務(wù)的隔離級(jí)別 int getTimeout();//事務(wù)超時(shí)時(shí)間 boolean isReadOnly();//是否只讀 String getName(); }
? PlatformTransactionManager接口用于執(zhí)行具體的事務(wù),包括獲取當(dāng)前事務(wù)狀態(tài),提交事務(wù)、事務(wù)回滾等。
PlatformTransactionManager接口源碼如下:
public interface PlatformTransactionManager { //根據(jù)事務(wù)定義信息,獲得當(dāng)前狀態(tài) TransactionStatus getTransaction(TransactionDefinition var1) throws TransactionException; //提交事務(wù) void commit(TransactionStatus var1) throws TransactionException; //回滾事務(wù) void rollback(TransactionStatus var1) throws TransactionException; }
?? TransactionStatus接口代表了一個(gè)事務(wù)本身,提供了一個(gè)簡(jiǎn)單的控制事務(wù)執(zhí)行和查詢事務(wù)狀態(tài)的方法。PlatformTransactionManager接口的getTransaction()方法會(huì)返回一個(gè)TransactionStatus對(duì)象,該對(duì)象可能代表一個(gè)新的或者一個(gè)已經(jīng)存在的事務(wù)。
TransactionStatus接口源碼如下:
public interface TransactionStatus extends SavepointManager, Flushable { boolean isNewTransaction();//是否一個(gè)新的事務(wù) boolean hasSavepoint();// void setRollbackOnly();//將事務(wù)設(shè)置為只能回滾,不允許提交 boolean isRollbackOnly();//查詢事務(wù)是否已有回滾標(biāo)志 void flush(); boolean isCompleted();//查詢事務(wù)是否結(jié)束 }3.三個(gè)核心接口之間的關(guān)系
? ?PlatformTransactionManager根據(jù)TransactionDefinition定義進(jìn)行事務(wù)管理,管理過(guò)程中事務(wù)存在多種不同的狀態(tài),每個(gè)事務(wù)狀態(tài)信息都通過(guò)TransactionStatus進(jìn)行表示。PlatformTransactionManager的默認(rèn)實(shí)現(xiàn)類AbstractPlatformTransactionManager,針對(duì)不同的數(shù)據(jù)庫(kù)持久化操作技術(shù),又分別有不同的實(shí)現(xiàn)類DataSourceTransactionManager,HibernateTransactionManager,JpaTransactionManager三個(gè)實(shí)現(xiàn)類,還有其他的。
4.不同平臺(tái)框架事務(wù)管理實(shí)現(xiàn)Spring不直接進(jìn)行事務(wù)管理,而是針對(duì)不同的平臺(tái)提供了多種事務(wù)管理器,將事務(wù)管理的職責(zé)委托給Jdbc、Hibernate、Jpa、iBatis等持久化機(jī)制所提供的相關(guān)平臺(tái)框架的事務(wù)機(jī)制來(lái)實(shí)現(xiàn)。Spring事務(wù)管理的接口是org.springframework.transaction.PlatformTransactionManager,通過(guò)這個(gè)接口,Spring為各個(gè)平臺(tái)提供了對(duì)應(yīng)的事務(wù)管理器,至于具體的實(shí)現(xiàn)是各個(gè)平臺(tái)的事情Spring并不關(guān)心,這就是 Spring事務(wù)管理的一個(gè)優(yōu)點(diǎn):為不同的平臺(tái)事務(wù)API提供了一致的編程模型。
JDBC事務(wù)
如果在項(xiàng)目開(kāi)發(fā)中直接使用JDBC來(lái)進(jìn)行持久化操作,DataSourceTransactionManager會(huì)用來(lái)處理事務(wù)邊界。DataSourceTransactionManager是通過(guò)調(diào)用Java.sql.Connection來(lái)管理事務(wù),而后者是通過(guò)DataSource獲取到的。通過(guò)調(diào)用連接的commit()方法來(lái)提交事務(wù),同樣,事務(wù)失敗則通過(guò)調(diào)用rollback()方法進(jìn)行回滾。為了使用DataSourceTransactionManager,你需要使用如下的XML將其裝配到應(yīng)用程序的上下文定義中:
Hibernate事務(wù)
如果在實(shí)際項(xiàng)目開(kāi)發(fā)中使用Hibernate來(lái)實(shí)現(xiàn)持久化操作,需要使用HibernateTransactionManager。sessionFactory屬性需要裝配一個(gè)Hibernate的session工廠,HibernateTransactionManager的實(shí)現(xiàn)細(xì)節(jié)是它將事務(wù)管理的職責(zé)委托給org.hibernate.Transaction對(duì)象,而后者是從Hibernate Session中獲取到的。當(dāng)事務(wù)成功完成時(shí),HibernateTransactionManager將會(huì)調(diào)用Transaction對(duì)象的commit()方法,反之,將會(huì)調(diào)用rollback()方法。對(duì)于Hibernate3,Hibernate事務(wù)的使用需要在Spring的配置文件上下文定義中添加如下
Java持久化API事務(wù)(JPA)
如果在實(shí)際項(xiàng)目開(kāi)發(fā)中使用JPA來(lái)實(shí)現(xiàn)持久化操作,那你需要使用Spring的JpaTransactionManager來(lái)處理事務(wù)。JpaTransactionManager只需要裝配一個(gè)JPA實(shí)體管理工廠(javax.persistence.EntityManagerFactory接口的任意實(shí)現(xiàn))。JpaTransactionManager將與由工廠所產(chǎn)生的JPA EntityManager合作來(lái)構(gòu)建事務(wù)。你需要在Spring中如下配置JpaTransactionManager:
?`
>“ 本訂閱號(hào)提供Java相關(guān)技術(shù)分享,從Java編程基礎(chǔ)到Java高級(jí)技術(shù),從JavaWeb技術(shù)基礎(chǔ)Jsp、Servlet、JDBC到SSH、SSM開(kāi)發(fā)框架,從REST風(fēng)格接口設(shè)計(jì)到分布式項(xiàng)目實(shí)戰(zhàn)。剖析主流開(kāi)源技術(shù)框架,用親身實(shí)踐來(lái)譜寫深度Java技術(shù)日志。“
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/67980.html
摘要:基于工廠,會(huì)有多種應(yīng)用上下文的實(shí)現(xiàn)的模塊在模塊中,面向切面編程提供了豐富的支持,該模塊是應(yīng)用系統(tǒng)中開(kāi)發(fā)切面的基礎(chǔ),可以幫助應(yīng)用對(duì)象解耦。的主頁(yè)安全對(duì)于許多應(yīng)用都是一個(gè)非常關(guān)鍵的切面。 簡(jiǎn)化Java開(kāi)發(fā) JavaBean:Enterprise JavaBean、EJBJDO:Java數(shù)據(jù)對(duì)象、Java Data ObjectPOJO:Plain Old Java ObjectDI:依賴注...
摘要:除了,還簡(jiǎn)單介紹了對(duì)的支持,可以幫助應(yīng)用將散落在各處的邏輯匯集于一處切面。當(dāng)裝配的時(shí)候,這些切面能夠運(yùn)行期編織起來(lái),這樣就能呢個(gè)非常有效的賦予新功能。 第1章 Spring之旅 說(shuō)明 1、本文參考了《Spring 實(shí)戰(zhàn)》重點(diǎn)內(nèi)容,參考了GitHub上的代碼 2、每個(gè)人的學(xué)習(xí)方式不一樣,但目的是一樣的,活學(xué)活用。最近一直在聽(tīng)《我們不一樣》 3、本文只為記錄作為以后參考,要想真正領(lǐng)悟Sp...
摘要:事務(wù)管理學(xué)習(xí)總結(jié)時(shí)間年月日星期二說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。一致性一致性指事務(wù)前后數(shù)據(jù)的完整性必須保持一致。聲明式事務(wù)管理基于的方式很少使用需要為每個(gè)進(jìn)行事務(wù)管理的類,配置一個(gè)進(jìn)行增強(qiáng)。 《Spring事務(wù)管理》學(xué)習(xí)總結(jié) 時(shí)間:2017年2月7日星期二說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com/教學(xué)示例源碼:https://github.com...
摘要:表示少女與緊耦合在它的構(gòu)造函數(shù)中自行創(chuàng)建了。面向切面編程往往被定義為促使軟件系統(tǒng)實(shí)現(xiàn)關(guān)注點(diǎn)的分離一項(xiàng)技術(shù)系統(tǒng)由許多不同的組件組成,每個(gè)組件各負(fù)責(zé)一特定的功能。我們可以把切面想象為覆蓋在很多組件之上的一個(gè)外殼。 第1章 Spring之旅 說(shuō)明 1、本文抄寫了《Spring 實(shí)戰(zhàn)》重點(diǎn)內(nèi)容,參考了GitHub上的代碼 2、每個(gè)人的學(xué)習(xí)方式不一樣,但目的是一樣的,活學(xué)活用。最近一直在聽(tīng)《我...
摘要:下一代服務(wù)端開(kāi)發(fā)下一代服務(wù)端開(kāi)發(fā)第部門快速開(kāi)始第章快速開(kāi)始環(huán)境準(zhǔn)備,,快速上手實(shí)現(xiàn)一個(gè)第章企業(yè)級(jí)服務(wù)開(kāi)發(fā)從到語(yǔ)言的缺點(diǎn)發(fā)展歷程的缺點(diǎn)為什么是產(chǎn)生的背景解決了哪些問(wèn)題為什么是的發(fā)展歷程容器的配置地獄是什么從到下一代企業(yè)級(jí)服務(wù)開(kāi)發(fā)在移動(dòng)開(kāi)發(fā)領(lǐng)域 《 Kotlin + Spring Boot : 下一代 Java 服務(wù)端開(kāi)發(fā) 》 Kotlin + Spring Boot : 下一代 Java...
閱讀 2163·2021-11-12 10:36
閱讀 2156·2021-09-03 10:41
閱讀 2771·2021-08-19 10:57
閱讀 1242·2021-08-17 10:14
閱讀 1497·2019-08-30 15:53
閱讀 1218·2019-08-30 15:43
閱讀 981·2019-08-30 13:16
閱讀 2990·2019-08-29 16:56