spring 中事物的說明

 
// 業務方法需要在一個事物中運行,如果方法運行時,已經存在一個事物中,
// 那麼加入該事物,否則爲自己創建一個新事物。
@Transactional(propagation = Propagation.REQUIRED)
public void test1() {
}

// 聲明方法不需要事務,如果方法沒有關聯到一個事務,容器不會爲它開啓事物。
// 如果方法在一個事物中被調用,該事物會被掛起,在方法調用結束後,原先的
// 事物便會恢復執行。
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void test2() {
}

// 表明不管是否存在事物,業務方法總會爲自己發起一個新事物。
// 如果方法已經運行在一個事物中,則原有事物會被掛起,
// 新的事物會被創建,直到方法執行結束,新事物纔算結束,
// 原先的事務纔會被恢復執行。
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void test3() {
}

// 該屬性指定業務方法只能在一個已經存在的事物中執行,
// 業務方法不能發起自己的事物,如果業務方法在沒有事物的環境
// 下調用,容器就會拋出異常。
@Transactional(propagation = Propagation.MANDATORY)
public void test4() {
}

// 這個事物屬性表明,如果業務方法在某個事務範圍內被調用,則方法成爲該事物的一部分,
// 如果業務方法在事務範圍外被調用,則方法在沒有事物的環境下執行。
@Transactional(propagation = Propagation.SUPPORTS)
public void test5() {
}

// 指定業務方法絕對不能在事物範圍內執行。如果業務方法在某個事物中執行,
// 容器會拋出異常,只有業務方法沒有關聯到任何事物,才能正常執行。
@Transactional(propagation = Propagation.NEVER)
public void test6() {
}

// 如果一個活動的事物存在,則運行在一個嵌套的事物中,如果沒有活動事物,
// 則按REQUIRED屬性執行,它使用了一個單獨的事物,這個事物擁有多個回滾的保存點,
// 內部事務的回滾不會對外事物造成影響,它只對DataSourceTransactionManager
// 事務管理器起效。
@Transactional(propagation = Propagation.NESTED)
public void test7() {
}

@Transactional(isolation = Isolation.DEFAULT)
public void test8() {
}

// 讀已提交數據(會出現不可重複讀和幻讀)
@Transactional(isolation = Isolation.READ_COMMITTED)
public void test9() {
}

// 讀未提交數據(會出現髒讀、不可重複讀和幻讀)
@Transactional(isolation = Isolation.READ_UNCOMMITTED)
public void test10() {
}

// 可重複讀(會出現幻讀)
@Transactional(isolation = Isolation.REPEATABLE_READ)
public void test11() {
}

// 串行化
@Transactional(isolation = Isolation.SERIALIZABLE)
public void test12() {
}

// 拋出Exception異常時,記錄回滾
@Transactional(rollbackFor = Exception.class)
public void test13() throws Exception {
}

// 拋出Exception異常時,記錄不回滾
@Transactional(noRollbackFor = Exception.class)
public void test14() throws Exception {
}

  • 髒讀:一個事物讀取到另一個事物未提交的更新數據。
  • 不可重複讀:在同一事物中,多次讀取同一數據返回的結果有所不同。換句話說就是,後續讀取可以讀到另一事務已提交的更新數據。
  • 可重複讀:在同一事物中多次讀取數據時,能夠保證所讀數據一樣,也就是,後續讀取不能讀到另一事務已提交的更新數據。
  • 幻讀:一個事務讀取到另一事務提交的insert數據。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章