成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring聲明式事務

開發 后端
本文介紹Spring聲明式事務,以及Spring事務管理的核心接口和在TransactionDefinition接口中定義了七個事務傳播行為。

Spring聲明式事務讓我們從復雜的事務處理中得到解脫。使得我們再也無需要去處理獲得連接、關閉連接、事務提交和回滾等這些操作。再也無需要我們在與事務相關的方法中處理大量的try…catch…finally代碼。
我們在使用Spring聲明式事務時,有一個非常重要的概念就是事務屬性。事務屬性通常由事務的傳播行為,事務的隔離級別,事務的超時值和事務只讀標志組成。我們在進行事務劃分時,需要進行事務定義,也就是配置事務的屬性。
Spring在TransactionDefinition接口中定義這些屬性,以供PlatfromTransactionManager使用, PlatfromTransactionManager是spring事務管理的核心接口。

  1. TransactionDefinition      
  2. public interface TransactionDefinition {      
  3. int getPropagationBehavior();      
  4.     int getIsolationLevel();      
  5.     int getTimeout();      
  6.     boolean isReadOnly();      

getTimeout()方法,它返回事務必須在多少秒內完成。isReadOnly(),事務是否只讀,事務管理器能夠根據這個返回值進行優化,確保事務是只讀的。getIsolationLevel()方法返回事務的隔離級別,事務管理器根據它來控制另外一個事務可以看到本事務內的哪些數據。 


1、ISOLATION_DEFAULT
2、ISOLATION_READ_UNCOMMITTED
3、ISOLATION_READ_COMMITTED
4、ISOLATION_REPEATABLE_READ
5、ISOLATION_SERIALIZABLE

1、ISOLATION_DEFAULT 這是一個PlatfromTransactionManager默認的隔離級別,使用數據庫默認的事務隔離級別.另外四個與JDBC的隔離級別相對應
2、ISOLATION_READ_UNCOMMITTED 這是事務最低的隔離級別,它充許別外一個事務可以看到這個事務未提交的數據。這種隔離級別會產生臟讀,不可重復讀和幻像讀。
例如:
Mary的原工資為1000,財務人員將Mary的工資改為了8000,但未提交事務  

  1. Connection con1 = getConnection();      
  2. con.setAutoCommit(false);      
  3. update employee set salary = 8000 where empId ="Mary";  

與此同時,Mary正在讀取自己的工資

  1. Connection con2 = getConnection();      
  2. select   salary from employee where empId ="Mary";      
  3. con2.commit();  


Mary發現自己的工資變為了8000,歡天喜地!而財務發現操作有誤,而回滾了事務,Mary的工資又變為了1000

  1. //con1      
  2.    con1.rollback();   

 像這樣,Mary記取的工資數8000是一個臟數據。

3、ISOLATION_READ_COMMITTED 保證一個事務修改的數據提交后才能被另外一個事務讀取。另外一個事務不能讀取該事務未提交的數據。這種事務隔離級別可以避免臟讀出現,但是可能會出現不可重復讀和幻像讀。

4、ISOLATION_REPEATABLE_READ 這種事務隔離級別可以防止臟讀,不可重復讀。但是可能出現幻像讀。它除了保證一個事務不能讀取另一個事務未提交的數據外,還保證了避免下面的情況產生(不可重復讀)。

在事務1中,Mary 讀取了自己的工資為1000,操作并沒有完成

  1. con1 = getConnection();      
  2. select salary from employee empId ="Mary";  

在事務2中,這時財務人員修改了Mary的工資為2000,并提交了事務. 

  1. con2 = getConnection();      
  2. update employee set salary = 2000;      
  3. con2.commit();  

在事務1中,Mary 再次讀取自己的工資時,工資變為了2000

  1. //con1      
  2. select salary from employee empId ="Mary"

在一個事務中前后兩次讀取的結果并不致,導致了不可重復讀。
使用ISOLATION_REPEATABLE_READ可以避免這種情況發生。

5、ISOLATION_SERIALIZABLE 這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執行。除了防止臟讀,不可重復讀外,還避免了幻像讀。

目前工資為1000的員工有10人。
事務1,讀取所有工資為1000的員工。 

  1. con1 = getConnection();      
  2. Select * from employee where salary =1000  

共讀取10條記錄

這時另一個事務向employee表插入了一條員工記錄,工資也為1000

  1. con2 = getConnection();      
  2. Insert into employee(empId,salary) values("Lili",1000);      
  3. con2.commit();  

事務1再次讀取所有工資為1000的員工

  1. //con1      
  2. select * from employee where salary =1000

共讀取到了11條記錄,這就產生了幻像讀。
ISOLATION_SERIALIZABLE能避免這樣的情況發生。但是這樣也耗費了最大的資源。

getPropagationBehavior()返回事務的傳播行為,由是否有一個活動的事務來決定一個事務調用。

在TransactionDefinition接口中定義了七個事務傳播行為。

1、PROPAGATION_REQUIRED
2、PROPAGATION_SUPPORTS
3、PROPAGATION_MANDATORY
4、PROPAGATION_REQUIRES_NEW
5、PROPAGATION_NOT_SUPPORTED
6、PROPAGATION_NEVER
7、PROPAGATION_NESTED

1、PROPAGATION_REQUIRED 如果存在一個事務,則支持當前事務。如果沒有事務則開啟一個新的事務。 

  1. //事務屬性 PROPAGATION_REQUIRED      
  2. methodA{      
  3. ……      
  4. methodB();      
  5. ……      
  6. }      
  7.     
  8. //事務屬性 PROPAGATION_REQUIRED      
  9. methodB{      
  10.     ……      
  11. }   

使用spring聲明式事務,spring使用AOP來支持聲明式事務,會根據事務屬性,自動在方法調用之前決定是否開啟一個事務,并在方法執行之后決定事務提交或回滾事務。

【編輯推薦】

  1. 當Spring遇到Hibernate的時候
  2. 將Flex與Spring集成框架
  3. 如何集成Struts和Spring
  4. Spring2.0升級Spring2.0.7的變化
  5. Spring 2.0新功能
責任編輯:佚名 來源: JavaEye
相關推薦

2024-11-13 19:03:14

2021-09-06 13:42:14

Spring聲明式事務

2009-02-11 13:08:29

事務提交事務管理Spring

2009-02-11 11:14:31

事務管理事務開始Spring

2009-06-22 11:01:12

2021-04-15 08:01:27

Spring聲明式事務

2025-01-16 08:45:48

2011-11-23 16:28:07

JavaSpring框架

2023-04-28 08:21:36

SpringBoot聲明式事務編程式事務

2020-12-17 07:59:46

聲明式代碼命令式代碼代碼

2022-06-21 08:12:17

K8sAPI對象Kubernetes

2009-06-17 14:57:11

Spring事務管理

2009-06-08 17:56:00

SpringJDBC事務

2009-06-29 17:54:47

Spring事務隔離

2023-05-26 07:19:49

Spring聲明式事務

2011-01-27 10:11:46

J2EEjavaspring

2022-12-26 08:34:58

SpringHttp

2013-06-27 09:31:37

聲明式編程命令式編程編程

2022-06-27 08:21:05

Seata分布式事務微服務

2020-11-17 08:28:55

數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色就干| 一级毛片免费视频 | 91色视频在线观看 | 欧美日韩一 | 国产成人精品a视频一区www | 色妞av| 91精品国产一区二区三区 | 91网在线观看 | 蜜桃视频在线观看免费视频网站www | 日韩欧美国产一区二区 | 青青激情网 | 91精品国产91久久久久福利 | 亚洲欧美一区二区三区情侣bbw | 一区二区视屏 | 日本a在线 | 亚洲第一av网站 | 国产精品精品视频一区二区三区 | 成人福利电影 | 日韩精品免费视频 | 国产精品久久久久久久久久免费看 | 亚洲国产精品久久久久 | 国产综合网址 | 亚洲综合五月天婷婷 | 日韩久久中文字幕 | 久久中文字幕一区 | 9久久婷婷国产综合精品性色 | 国产精品久久久久久久久久久久 | 国产玖玖 | 美女黄视频网站 | 亚洲国产偷 | 久久伦理中文字幕 | 欧美精品一区二区三区在线播放 | 精品国产99 | 欧美日韩国产三级 | 精品1区2区 | 欧美精品一区二区三区四区 | 国产精品日韩一区二区 | 国产美女福利在线观看 | 午夜精品一区二区三区三上悠亚 | 免费一级黄色录像 | 久久久91精品国产一区二区精品 |