Spring事务的传播行为和隔离级别
1.事务的传播行为 事务的使用过程中,用的最多的传播行为是require,在大部分的mis系统里,可以对整个业务层切一个require的事务就可以满足需要。 但spring提供的不仅如此,对于复杂的业务,Spring也提供了相应的事务传播行为来满足业务需要。 Spring中的传
1.事务的传播行为
事务的使用过程中,用的最多的传播行为是require,在大部分的mis系统里,可以对整个业务层切一个require的事务就可以满足需要。
但spring提供的不仅如此,对于复杂的业务,Spring也提供了相应的事务传播行为来满足业务需要。
Spring中的传播行为如下:
Require:支持当前事务,如果没有事务,就建一个新的,这是最常见的;
Supports:支持当前事务,如果当前没有事务,就以非事务方式执行;
Mandatory:支持当前事务,如果当前没有事务,就抛出异常;
RequiresNew:新建事务,如果当前存在事务,把当前事务挂起;
NotSupported:以非事务方式执行操作,如果当前存在事务,就把事务挂起;
Never:以非事务方式执行,如果当前存在事务,则抛出异常。
Nested:新建事务,如果当前存在事务,把当前事务挂起。与RequireNew的区别是与父事务相关,且有一个savepoint。
其中,Require、Supports、NotSupported、Never两个看文字也就能了解,就不多说了。而Mandatory是要求所有的操作必须在一个事务里,较Require来说,对事务要求的更加严格。
RequireNew:当一个Require方法A调用RequireNew方法B时,B方法会新new一个事务,并且这个事务和A事务没有关系,也就是说B方法出现异常,不会导致A的回滚,同理当B已提交,A再出现异常,B也不会回滚。
Nested:这个和RequireNew的区别是B方法的事务和A方法的事务是相关的。只有在A事务提交的时候,B事务都会提交。也就是说当A发生异常时,A、B事务都回滚,而当B出现异常时,B回滚,而A回滚到savepoint,如下代码所示:
public void A(){ //操作1 //操作2 //操作3 try{ //savepoint B();//一个Nested的方法 } catch{ //出现异常,B方法回滚,A方法回滚到 //savepoint,也就是说操作1、2、3 都还在 C(); } finally{ } }
说完了事务传播的行为,现在再说下事务隔离级别,事务隔离级别的出现,是为了使你在性能与数据的有效性之间做一个平衡,不是说级别越高越好,只有合适才是最好的。
事务隔离级别如下:
Serializable:最严格的级别,事务串行执行,资源消耗最大;
Repeatable Read:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。
Read Committed:大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已经修改但未提交的数据。适用于大多数系统。
Read Uncommitted:保证了读取过程中不会读取到非法数据。
想要理解这四个级别,还需要知道三种不讨人喜欢的事情:
dirty reads:脏读,就是说事务A未提交的数据被事务B读走,如果事务A失败回滚,将导致B所读取的数据是错误的。
non-repeatable reads:不可重复读,就是说事务A中两处读取数据,第一次读时是100,然后事务B把值改成了200,事务A再读一次,结果就发现值变了,造成A事务数据混乱。
phantom read:幻读,和不可重复读相似,也是同一个事务中多次读不一致的问题。但是不可重复读的不一致是因为它所要取的数据集被改变了,而幻读所要读的数据不一致却不是他所要读的数据改变,而是它的条件数据集改变。比如:Select id where name="ppgogo*",第一次读去了6个符合条件的id,第二次读时,由于事务B把第一个贴的名字由"dd"改成了“ppgogo9”,结果取出来7个数据。
而事务的隔离级别会导致读取到非法数据的情况如下表示:

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

2023年,AI技術已成為熱門話題,對各行業產生了巨大影響,程式設計領域尤其如此。人們越來越認識到AI技術的重要性,Spring社群也不例外。隨著GenAI(GeneralArtificialIntelligence)技術的不斷進步,簡化具備AI功能的應用程式的創建變得至關重要和迫切。在這個背景下,"SpringAI"應運而生,旨在簡化開發AI功能應用程式的過程,使其變得簡單直觀,避免不必要的複雜性。透過"SpringAI",開發者可以更輕鬆地建立具備AI功能的應用程序,將其變得更加易於使用和操作

Spring+AI作為行業領導者,透過其強大、靈活的API和先進的功能,為各種行業提供了領先性的解決方案。在本專題中,我們將深入探討Spring+AI在各領域的應用範例,每個案例都將展示Spring+AI如何滿足特定需求,實現目標,並將這些LESSONSLEARNED擴展到更廣泛的應用。希望這個專題能對你有所啟發,更深入地理解和利用Spring+AI的無限可能。 Spring框架在軟體開發領域已經有超過20年的歷史,自SpringBoot1.0版本發布以來已有10年。現在,無人會質疑,Spring

spring編程式事務的實作方式:1、使用TransactionTemplate;2、使用TransactionCallback和TransactionCallbackWithoutResult;3、使用Transactional註解;4、使用TransactionTemplate和@Transactional結合使用;5、自訂事務管理器。

Spring設定事務隔離等級的方法:1、使用@Transactional註解;2、在Spring設定檔中設定;3、使用PlatformTransactionManager;4、在Java配置類別中設定。詳細介紹:1、使用@Transactional註解,在需要進行事務管理的類別或方法上加入@Transactional註解,並在屬性中設定隔離等級;2、在Spring設定檔等等。

1.PDO簡介PDO是PHP的擴充庫,它提供了一個物件導向的方式來操作資料庫。 PDO支援多種資料庫,包括Mysql、postgresql、oracle、SQLServer等。 PDO使開發人員能夠使用統一的api來操作不同的資料庫,這使得開發人員可以在不同的資料庫之間輕鬆切換。 2.PDO連接資料庫要使用PDO連接資料庫,首先需要建立一個PDO物件。 PDO物件的建構函式接收三個參數:資料庫類型、主機名稱、資料庫使用者名稱和密碼。例如,以下程式碼建立了一個連接到mysql資料庫的物件:$dsn="mysq

MySQL事務處理:自動提交與手動提交的差異在MySQL資料庫中,事務是一組SQL語句的集合,要麼全部執行成功,要麼全部執行失敗,保證了資料的一致性和完整性。在MySQL中,事務可以分為自動提交和手動提交,其區別在於事務提交的時機以及對事務的控制範圍。以下將詳細介紹自動提交和手動提交的區別,並給出具體的程式碼範例來說明。一、自動提交在MySQL中,如果沒有顯示

Spring是一個開源框架,提供了許多註解來簡化和增強Java開發。本文將詳細解釋常用的Spring註解,並提供具體的程式碼範例。 @Autowired:自動組裝@Autowired註解可以用於自動組裝Spring容器中的Bean。當我們在需要依賴的地方使用@Autowired註解時,Spring將會在容器中尋找匹配的Bean並自動注入。範例程式碼如下:@Auto

事務確保資料庫資料完整性,包括原子性、一致性、隔離性和持久性。 JDBC使用Connection介面提供交易控制(setAutoCommit、commit、rollback)。並發控制機制協調並發操作,使用鎖或樂觀/悲觀並發控制來實現事務隔離性,以防止資料不一致。
