1. 程式人生 > >Spring 的事務傳播型別、事務隔離級別

Spring 的事務傳播型別、事務隔離級別

事務傳播型別

spring 的7種事務傳播型別

  • PROPAGATION_REQUIRED: 如果當前沒有事務,則建立一個新事務;如果當前存在事務,就加入該事務;該配置是最常用的設定。
  • PROPAGATION_SUPPORTS: 支援當前事務,如果當前存在事務則加入該事務;如果當前不存在事務,就以非事務執行。
  • PROPAGATION_MANDATORY: 支援當前事務,如果當前存在事務則就加入該事務;如果不存在事務,則丟擲異常。
  • PROPAGATION_REQUIRES_NEW: 無論當前存在不存在事務,都建立新事務。
  • PROPAGATION_NOT_SUPPORTED: 以非事務方式執行操作,如果當前存在事務,則把當前事務掛起。
  • PROPAGATION_NEVER: 以非事務方式執行,如果當前存在事務,則丟擲異常。
  • PROPAGATION_NESTED: 如果當前存在事務,則在巢狀事務內執行,如果當前沒有事務,則執行與PROPAGATION_REQUIRED類似的操作。

注意:
內部方法直接呼叫,傳播性失效

@Service("studentImpl")
public class StudentImpl implements Student {
 
	@Autowired
	StudentDao studentDao;
	
	@Autowired
	UserService userService;
 
	@Transactional
(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, rollbackFor = Exception.class) public String doA() throws Exception { Student student = new Student(); student.setSex("F"); student.setUsername("唐玄奘"); studentDao.insertStudent(student); userService.addUser(); int
i = 1 / 0; // 模擬異常,事務回滾 return "ok!"; } }
@Service("userServiceImpl")
public class UserServiceImpl implements UserService {
  
	@Autowired
	UserDao userDao;
	
	@Transactional(propagation = Propagation.REQUIRES_NEW,isolation=Isolation.DEFAULT,rollbackFor=Exception.class)  
	public String addUser() throws Exception {
		User user = new User();
		user.setUsername("觀世音菩薩");
		userDao.insert(user);
		return "ok!";
	}
	 
}

結果:只會是 user 插入成功, 因為 addUser方法使用了事務傳播行為:Propagation.REQUIRES_NEW,當前存在事務1,則新建了一個自己的事務,並掛起了事務1. 事務2提交後,事務1由於丟擲了異常回滾。

如果以上例子改為在一個方法中呼叫另一個事務方法,另一個方法的傳播行為會失效:

@Service("studentImpl")
public class StudentImpl implements Student {
 
	@Autowired
	StudentDao studentDao;
	
	@Autowired
	UserDao userDao;
 
	@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, rollbackFor = Exception.class)
	public String doA() throws Exception {
		Student student = new Student();
		student.setSex("F");
		student.setUsername("唐玄奘");
		studentDao.insertStudent(student);
		
		
		userService.addUser();
		int i = 1 / 0; // 模擬異常,事務回滾
		return "ok!";
	}
	
	@Transactional(propagation = Propagation.REQUIRES_NEW,isolation=Isolation.DEFAULT,rollbackFor=Exception.class)  
	public String addUser() throws Exception {
		User user = new User();
		user.setUsername("觀世音菩薩");
		userDao.insert(user);
		return "ok!";
	}
 
}


結果:addUser 的事務傳播性會失效,事務1回滾後,資料庫不會插入任何記錄。

spring 的5種隔離級別

  • ISOLATION_DEFAULT: 這是一個PlatfromTransactionManager預設的隔離級別,使用資料庫預設的事務隔離級別。
  • ISOLATION_READ_UNCOMMITTED: 事務最低的隔離級別,它允許其他事務可以看到這個事務未提交的資料;會產生髒讀、不可重複讀、幻讀。
  • ISOLATION_READ_COMMITTED: 保證一個事務提交後才能被另一個事務讀取;另外一個事務不能讀取該事務未提交的資料;這種事務隔離級別可以避免髒讀出現,但是可能會出現 不可重複讀、幻讀。
  • ISOLATION_REPEATABLE_READ: 防止出現髒讀、不可重複讀,但是可能出現幻讀;一個事務不能讀取另一個事務未提交的資料,同時避免出現 不可重複讀。
  • ISOLATION_SERIALIZABLE: 防止髒讀、不可重複讀、幻讀;代價最高可靠性最好的事務隔離級別,事務被處理為順序執行。

關鍵詞:

幻讀: 事務1 讀取記錄時,事務2 增加了記錄並提交, 事務1 再次讀取時可以看到事務2 新增的記錄。 指一個事務讀取了一個未提交事務的資料。

不可重複讀取: 事務1 讀取記錄時, 事務2 更新了記錄並提交, 事務1 再次讀取時可以看到 事務2 修改後的記錄。 在一個事務內讀取表中的某一行資料,多次讀取結果不同,一個事務讀取到了另一個事務提交後的資料。

髒讀: 事務1 更新了記錄, 但是沒有提交,事務2 讀取了更新後的行, 然後事務1 回滾,現在事務2 讀取無效。 在一個事務內讀取了別的事務插入的資料,導致前後讀取不一致。

相關推薦

Spring事務傳播型別事務隔離級別

事務傳播型別 spring 的7種事務傳播型別 PROPAGATION_REQUIRED: 如果當前沒有事務,則建立一個新事務;如果當前存在事務,就加入該事務;該配置是最常用的設定。 PROPAGAT

spring事務管理(一) 隔離級別傳播行為

1.事務的定義 事務是指多個操作單元組成的合集,多個單元操作是整體不可分割的,要麼都操作不成功,要麼都成功。其必須遵循四個原則(ACID)。 原子性(Atomicity):即事務是不可分割的最小工作單元,事務內的操作要麼全做,要麼全不做; 一致性(Consistency

spring事務傳播行為隔離級別事務的一些基本概念

事務ACID:    原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、永續性(Durability)。     1. 原子性(Atomicity):    原子性是指事務是一個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。     2. 一致性(Con

spring事務傳播行為及事務隔離級別

事務的特性(ACID): 1. 原子性(Atomicity):  事務是一個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。 2. 一致性(Consistency): 事務前後資料的完整性必須保持一致 3. 隔離性(Isolation):一個事務的執行不能被其他事

spring事務傳播特性和事務隔離級別

一、事務傳播特性 轉自:http://www.iteye.com/topic/35907 在所有使用 spring 的應用中, 宣告式事務管理可能是使用率最高的功能了, 但是, 從我觀察到的情況看, 絕大多數人並不能深刻理解事務宣告中不同事務傳播屬性配置的的含義, 讓我們

spring 事務傳播行為和事務隔離級別

1、Spring宣告式事務 宣告式事務(declarative transaction management)是Spring提供的對程式事務管理的方式之一。 Spring的宣告式事務顧名思義就是採用宣告的方式來處理事務。這裡所說的宣告,就是指在配置檔案中申明。用在Sp

spring的4種事務特性,5種隔離級別,7種傳播行為

spring事務: 什麼是事務: 事務邏輯上的一組操作,組成這組操作的各個邏輯單元,要麼一起成功,要麼一起失敗. 事務特性(4種): 原子性 (atomicity):強調事務的不可分割. 一致

Spring的四種事務特性,五種隔離級別,七種傳播行為

Spring事務:什麼是事務:事務邏輯上的一組對資料對操作,組成這些操作的各個邏輯單元,要麼一起成功,要麼一起失敗。事務特性(4種):原子性(atomicity):強調事務的不可分割;一致性(consistency):事務的執行前後資料的完整性保持一致;隔離性(isolati

Spring4深入理解----事務(宣告式事務和xml配置事務事務傳播屬性,事務其他屬性(隔離級別&回滾&只讀&過期))

  •事務管理是企業級應用程式開發中必不可少的技術,  用來確保資料的完整性和一致性.   •事務就是一系列的動作,它們被當做一個單獨的工作單元.這些動作要麼全部完成,要麼全部不起作用   •事務的四個關鍵屬性(ACID)     –原子性(atomicity):事務是一

【資料庫】事務事務的四大特性(ACID)三大併發問題四種鎖四大隔離級別以及它們的實現

資料庫事務 事務(Transaction)是併發控制的基本單位。所謂的事務,它是一個操作序列,這些操作要麼都執行,要麼都不執行,它是一個不可分割的工作單位。 (資料庫引擎innoDB是支援事務的(預設每一條sql語句為一個事務),MyISAM不支援事務。) 在關係資料庫中,

網絡協議 finally{ return問題 註入問題 jdbc註冊驅動問題 PreparedStatement 連接池目的 1.2.1DBCP連接池 C3P0連接池 MYSQL兩種方式進行實物管理 JDBC事務 DBUtils事務 ThreadLocal 事務特性 並發訪問 隔離級別

ID -- 1.7 ner red style 沒有 建立 工具 1.1.1 API詳解:註冊驅動 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建議使用 原因有2個: >導致驅動被註冊2次。 &

java-mybaits-009-mybatis-spring-使用,SqlSessionFactoryBean事務

aos ima 數據 status settings 查看 return 命名空間 sample 一、版本限制 參看地址:http://www.mybatis.org/spring/ 二、使用入門 2.1、pom <dependency>

spring的使用-jdbc事務

spring對資料庫的操作:jdbcTemplate操作及事務管理 1.jdbcTemplate操作資料庫:       1. 匯入jar包(3個)         &nbs

資料庫事務的四大特性和隔離級別

資料庫事務的四大特性以及事務的隔離級別   本篇講訴資料庫中事務的四大特性(ACID),並且將會詳細地說明事務的隔離級別。 如果一個數據庫聲稱支援事務的操作,那麼該資料庫必須要具備以下四個特性: ⑴ 原子性(Atomicity)   原子性是指事務包含的所有操

資料庫事務ACID和四個隔離級別

在實際的業務場景中,併發讀寫引出了和事務控制的需求。優秀的事務處理能力是關係型資料庫(特別是oracle等商用RDBMS)相對於正當風口的NoSQL資料庫的一大亮點。但這也從另一方面說明了事務控制的複雜性——正因為過於複雜,大部分NoSQL都沒提供事務支援或只提供部分事務支援

MySQL學習之事務及其四大特性和隔離級別

事務 定義: 事務是指資料庫中的一組邏輯操作,這個操作的特點就是在該組邏輯中,所有的操作要麼全部成功,要麼全部失敗。在各個資料具有特別緊密的聯絡時,最好是使用資料庫的事務來完成邏輯處理。 說的通俗點就是,我們執行一個事件時,光靠簡簡單單的一句sql語句是無法完成的,這時候我們

資料庫事務的四大特性與隔離級別及測試

四大特性 ⑴ 原子性(Atomicity)   原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,這和前面兩篇部落格介紹事務的功能是一樣的概念,因此事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能對資料庫有任何影響。 ⑵ 一

JMeter 像 LoadRunner 那樣實時檢視每秒事務數(TPS)事務響應時間(TRT)

出處:http://blog.csdn.net/defonds/article/details/54576604熟悉 LoadRunner 的朋友一定不會對其 TPS(每秒事務數)、TRT(事務響應時間) 等檢視感到陌生,因為這是壓力測試最為關鍵的兩個指標。JMeter 以其

什麽是事務事務特性事務隔離級別spring事務傳播特性

ons pri table 產生 serializa support enc 不一致 修改 1.什麽是事務: 事務是程序中一系列嚴密的操作,所有操作執行必須成功完成,否則在每個操作所做的更改將會被撤銷,這也是事務的原子性(要麽成功,要麽失敗)。 2.事務特性: 事務特性分為

spring的4種事務特性4種隔離級別7種傳播行為

1.事務概念事務是程式中一系列嚴密的操作,所有操作執行必須成功完成,否則在每個操作所做的更改將會被撤銷,這也是事務的原子性(要麼成功,要麼失敗)。2.事務特性(4種)事務特性分為四個:原子性(Atomi