多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

中國最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2

wkspring教程

Spring 事務管理

閱讀 (2151)

事務管理

一個數據庫事務是一個被視為單一的工作單元的操作序列。這些操作應該要么完整地執行,要么完全不執行。事務管理是一個重要組成部分,RDBMS 面向企業應用程序,以確保數據完整性和一致性。事務的概念可以描述為具有以下四個關鍵屬性說成是 ACID

  • 原子性:事務應該當作一個單獨單元的操作,這意味著整個序列操作要么是成功,要么是失敗的。

  • 一致性:這表示數據庫的引用完整性的一致性,表中唯一的主鍵等。

  • 隔離性:可能同時處理很多有相同的數據集的事務,每個事務應該與其他事務隔離,以防止數據損壞。

  • 持久性:一個事務一旦完成全部操作后,這個事務的結果必須是永久性的,不能因系統故障而從數據庫中刪除。

一個真正的 RDBMS 數據庫系統將為每個事務保證所有的四個屬性。使用 SQL 發布到數據庫中的事務的簡單視圖如下:

  • 使用 begin transaction 命令開始事務。

  • 使用 SQL 查詢語句執行各種刪除、更新或插入操作。

  • 如果所有的操作都成功,則執行提交操作,否則回滾所有操作。

Spring 框架在不同的底層事務管理 APIs 的頂部提供了一個抽象層。Spring 的事務支持旨在通過添加事務能力到 POJOs 來提供給 EJB 事務一個選擇方案。Spring 支持編程式和聲明式事務管理。EJBs 需要一個應用程序服務器,但 Spring 事務管理可以在不需要應用程序服務器的情況下實現。

局部事物 vs. 全局事務

局部事務是特定于一個單一的事務資源,如一個 JDBC 連接,而全局事務可以跨多個事務資源事務,如在一個分布式系統中的事務。

局部事務管理在一個集中的計算環境中是有用的,該計算環境中應用程序組件和資源位于一個單位點,而事務管理只涉及到一個運行在一個單一機器中的本地數據管理器。局部事務更容易實現。

全局事務管理需要在分布式計算環境中,所有的資源都分布在多個系統中。在這種情況下事務管理需要同時在局部和全局范圍內進行。分布式或全局事務跨多個系統執行,它的執行需要全局事務管理系統和所有相關系統的局部數據管理人員之間的協調。

編程式 vs. 聲明式

Spring 支持兩種類型的事務管理:

  • 編程式事務管理 :這意味著你在編程的幫助下有管理事務。這給了你極大的靈活性,但卻很難維護。

  • 聲明式事務管理 :這意味著你從業務代碼中分離事務管理。你僅僅使用注釋或 XML 配置來管理事務。

聲明式事務管理比編程式事務管理更可取,盡管它不如編程式事務管理靈活,但它允許你通過代碼控制事務。但作為一種橫切關注點,聲明式事務管理可以使用 AOP 方法進行模塊化。Spring 支持使用 Spring AOP 框架的聲明式事務管理。

Spring 事務抽象

Spring 事務抽象的關鍵是由 org.springframework.transaction.PlatformTransactionManager 接口定義,如下所示:

public interface PlatformTransactionManager {
   TransactionStatus getTransaction(TransactionDefinition definition);
   throws TransactionException;
   void commit(TransactionStatus status) throws TransactionException;
   void rollback(TransactionStatus status) throws TransactionException;
}
序號方法 & 描述
1

TransactionStatus getTransaction(TransactionDefinition definition)

根據指定的傳播行為,該方法返回當前活動事務或創建一個新的事務。

2

void commit(TransactionStatus status)

該方法提交給定的事務和關于它的狀態。

3

void rollback(TransactionStatus status)

該方法執行一個給定事務的回滾。

TransactionDefinition 是在 Spring 中事務支持的核心接口,它的定義如下:

public interface TransactionDefinition {
   int getPropagationBehavior();
   int getIsolationLevel();
   String getName();
   int getTimeout();
   boolean isReadOnly();
}
序號方法 & 描述
1

int getPropagationBehavior()

該方法返回傳播行為。Spring 提供了與 EJB CMT 類似的所有的事務傳播選項。

2

int getIsolationLevel()

該方法返回該事務獨立于其他事務的工作的程度。

3

String getName()

該方法返回該事務的名稱。

4

int getTimeout()

該方法返回以秒為單位的時間間隔,事務必須在該時間間隔內完成。

5

boolean isReadOnly()

該方法返回該事務是否是只讀的。

下面是隔離級別的可能值:

序號隔離 & 描述
1

TransactionDefinition.ISOLATION_DEFAULT

這是默認的隔離級別。

2

TransactionDefinition.ISOLATION_READ_COMMITTED

表明能夠阻止誤讀;可以發生不可重復讀和虛讀。

3

TransactionDefinition.ISOLATION_READ_UNCOMMITTED

表明可以發生誤讀、不可重復讀和虛讀。

4

TransactionDefinition.ISOLATION_REPEATABLE_READ

表明能夠阻止誤讀和不可重復讀;可以發生虛讀。

5

TransactionDefinition.ISOLATION_SERIALIZABLE

表明能夠阻止誤讀、不可重復讀和虛讀。

下面是傳播類型的可能值:

序號傳播 & 描述
1

TransactionDefinition.PROPAGATION_MANDATORY

支持當前事務;如果不存在當前事務,則拋出一個異常。

2

TransactionDefinition.PROPAGATION_NESTED

如果存在當前事務,則在一個嵌套的事務中執行。

3

TransactionDefinition.PROPAGATION_NEVER

不支持當前事務;如果存在當前事務,則拋出一個異常。

4

TransactionDefinition.PROPAGATION_NOT_SUPPORTED

不支持當前事務;而總是執行非事務性。

5

TransactionDefinition.PROPAGATION_REQUIRED

支持當前事務;如果不存在事務,則創建一個新的事務。

6

TransactionDefinition.PROPAGATION_REQUIRES_NEW

創建一個新事務,如果存在一個事務,則把當前事務掛起。

7

TransactionDefinition.PROPAGATION_SUPPORTS

支持當前事務;如果不存在,則執行非事務性。

8

TransactionDefinition.TIMEOUT_DEFAULT

使用默認超時的底層事務系統,或者如果不支持超時則沒有。

TransactionStatus 接口為事務代碼提供了一個簡單的方法來控制事務的執行和查詢事務狀態。

public interface TransactionStatus extends SavepointManager {
   boolean isNewTransaction();
   boolean hasSavepoint();
   void setRollbackOnly();
   boolean isRollbackOnly();
   boolean isCompleted();
}
序號方法 & 描述
1

boolean hasSavepoint()

該方法返回該事務內部是否有一個保存點,也就是說,基于一個保存點已經創建了嵌套事務。

2

boolean isCompleted()

該方法返回該事務是否完成,也就是說,它是否已經提交或回滾。

3

boolean isNewTransaction()

在當前事務時新的情況下,該方法返回 true。

4

boolean isRollbackOnly()

該方法返回該事務是否已標記為 rollback-only。

5

void setRollbackOnly()

該方法設置該事務為 rollback-only 標記。

關閉
程序員人生
主站蜘蛛池模板: 中文字幕无线码一区二区三区 | 国产精品 第二页 | 亚洲欧美国产精品第1页 | 欧美曰韩一区二区三区 | 精品国产一区二区三区香蕉沈先生 | 成人国产精品 | videos欧美成人 | 美女教师一级毛片 | 国产成人精品免费视频网页大全 | 免费jizz在线播放视频高清版 | 最新国产大片高清视频 | 精品久久久久久久一区二区伦理 | 欧美黑人乱大交ⅹxxxxx | 波多野结衣99 | 国产一区二区精品久久91 | 五月天精品视频播放在线观看 | 亚欧乱色| 全黄大全大色全免费大片 | 国产成人综合一区人人 | 女bbbbxxxx毛片视频0 | 国产香蕉影视院 | 中文字幕免费在线看 | 麻豆久久精品免费看国产 | 在线视频亚洲 | 亚洲欧洲春色校园另类小说 | 亚洲精品国产经典一区二区 | 亚洲天码中文字幕第一页 | 亚洲高清国产一区二区三区 | 日本护士xxxjapanese | 视频免费在线 | 成年人免费在线视频观看 | 国产精品亚洲午夜不卡 | 欧美aa在线观看 | 夜趣第一宅男福社区国产 | 爰上碰23在线视频 | 国产老妇一性一交一乱 | 亚洲黄色免费在线观看 | 亚洲视频你懂的 | 久久精品亚洲综合 | 亚洲欧美不卡中文字幕 | 粉嫩00福利视频在线精品 |