大家在使用spring的註解式事務管理時,對事務的傳播行為和隔離級別可能有點不知所措,下邊就詳細的介紹下以備方便查閱。
事物註解方式: @transactional
當標於類前時, 標示類中所有方法都進行事物處理
例子:@transactional
public class testservicebean implements testservice {}
當類中某些方法不需要事物時:
@transactional
public class testservicebean implements testservice
@transactional(propagation = propagation.not_supported)
public listgetall()
}事物傳播行為介紹:
@transactional(propagation=propagation.required)
如果有事務, 那麼加入事務, 沒有的話新建乙個(預設情況下)
@transactional(propagation=propagation.not_supported)
容器不為這個方法開啟事務
@transactional(propagation=propagation.requires_new)
不管是否存在事務,都建立乙個新的事務,原來的掛起,新的執行完畢,繼續執行老的事務
@transactional(propagation=propagation.mandatory)
必須在乙個已有的事務中執行,否則丟擲異常
@transactional(propagation=propagation.never)
必須在乙個沒有的事務中執行,否則丟擲異常(與propagation.mandatory相反)
@transactional(propagation=propagation.supports)
如果其他bean呼叫這個方法,在其他bean中宣告事務,那就用事務.如果其他bean沒有宣告事務,那就不用事務.
事物超時設定:
@transactional(timeout=30) //預設是30秒
事務隔離級別:
@transactional(isolation = isolation.read_uncommitted)
讀取未提交資料(會出現髒讀, 不可重複讀) 基本不使用
@transactional(isolation = isolation.read_committed)
讀取已提交資料(會出現不可重複讀和幻讀)
@transactional(isolation = isolation.repeatable_read)
可重複讀(會出現幻讀)
@transactional(isolation = isolation.serializable)
序列化mysql: 預設為repeatable_read級別
sqlserver: 預設為read_committed
髒讀 : 乙個事務讀取到另一事務未提交的更新資料
不可重複讀 : 在同一事務中, 多次讀取同一資料返回的結果有所不同, 換句話說,
後續讀取可以讀到另一事務已提交的更新資料. 相反, "可重複讀"在同一事務中多次
讀取資料時, 能夠保證所讀資料一樣, 也就是後續讀取不能讀到另一事務已提交的更新資料
Spring 使用註解方式進行事物管理
spring 使用註解方式進行事物管理 當標於類前時,標示類中所有方法都進行事物處理 例子 transactional public class testservicebean implements testservice 當類中某些方法不需要事物時 transactional public cla...
Spring 使用註解方式進行事物管理
事物註解方式 transactional 當標於類前時,標示類中所有方法都進行事物處理 例子 transactional public class testservicebean implements testservice 當類中某些方法不需要事物時 讀取資料庫中的資料時是不需要事務管理的,這種情...
Spring 使用註解方式進行事物管理
大家在使用spring的註解式事務管理時,對事務的傳播行為和隔離級別可能有點不知所措,下邊就詳細的介紹下以備方便查閱。事物註解方式 transactional 當標於類前時,標示類中所有方法都進行事物處理 例子 transactional public class testservicebean i...