required:業務方法需要在乙個事務中執行。如果方法執行時,已經處在乙個事務中,那麼加入到該事務,否則為自己建立乙個新的事務。
not_supported:宣告方法不需要事務。如果方法沒有關聯到乙個事務,容器不會為它開啟事務。如果方法在乙個事務中被呼叫,該事務會被掛起,在方法呼叫結束後,原先的事務便會恢復執行。
requiresnew:屬性表明不管是否存在事務,業務方法總會為自己發起乙個新的事務。如果方法已經執行在乙個事務中,則原有事務會被掛起,新的事務會被建立,直到方法執行結束,新事務才算結束,原先的事務才會恢復執行。
mandatory:該屬性指定業務方法只能在乙個已經存在的事務中執行,業務方法不能發起自己的事務。如果業務方法在沒有事務的環境下呼叫,容器就會丟擲例外。
supports:這一事務屬性表明,如果業務方法在某個事務範圍內被呼叫,則方法成為該事務的一部分。如果業務方法在事務範圍外被呼叫,則方法在沒有事務的環境下執行。
never:指定業務方法絕對不能在事務範圍內執行。如果業務方法在某個事務中執行,容器會丟擲例外,只有業務方法沒有關聯到任何事務,才能正常執行。
nested:如果乙個活動的事務存在,則執行在乙個巢狀的事務中. 如果沒有活動事務, 則按required屬性執行.它使用了乙個單獨的事務, 這個事務擁有多個可以回滾的儲存點。內部事務的回滾不會對外部事務造成影響。它只對datasourcetransactionmanager事務管理器起效
關於事務隔離級別的問題:
資料庫系統提供了四種事務隔離級別供使用者選擇。不同的隔離級別採用不同的鎖型別來實現,在四種隔離級別中,serializable的隔離級別最高,read uncommited的隔離級別最低。大多資料庫預設的隔離級別為read commited,如sqlserver,當然也有少部分資料庫預設的隔離級別為repeatable read ,如mysql
read uncommited:讀未提交資料(會出現髒讀,不可重複讀和幻讀)。
read commited:讀已提交資料(會出現不可重複讀和幻讀)
repeatable read:可重複讀(會出現幻讀)
serializable:序列化
髒讀:乙個事務讀取到另一事務未提交的更新新據。
不可重複讀:在同一事務中,多次讀取同一資料返回的結果有所不同。換句話說就是,後續讀取可以讀到另一事務已提交的更新資料。相反,「可重複讀」在同一事務中多次讀取資料時,能夠保證所讀資料一樣,也就是,後續讀取不能讀到另一事務已提交的更新資料。
幻讀:乙個事務讀取到另一事務已提交的insert資料。
關於事務的傳播特性和隔離級別的問題
required 業務方法需要在乙個事務中執行。如果方法執行時,已經處在乙個事務中,那麼加入到該事務,否則為自己建立乙個新的事務。not supported 宣告方法不需要事務。如果方法沒有關聯到乙個事務,容器不會為它開啟事務。如果方法在乙個事務中被呼叫,該事務會被掛起,在方法呼叫結束後,原先的事務...
spring 事務傳播特性 和隔離級別
事務的幾種傳播特性 1.propagation required 如果存在乙個事務,則支援當前事務。如果沒有事務則開啟 2.propagation supports 如果存在乙個事務,支援當前事務。如果沒有事務,則非事務的執行 3.propagation mandatory 如果已經存在乙個事務,支...
Spring事務的隔離級別和傳播特性
五個事務隔級別分別為 lsolation的屬性值 在乙個典型的應用程式中,多個事務同時執行,經常會為了完成他們的工作而操作同乙個資料。併發雖然是必需的,但是會導致一下問題 1,default 預設的事務隔離級別 2,read uncommitted 讀未提交,乙個事務可以操作另外乙個未提交的事務,不...