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