事物註解方式: @transactional
當標於類前時, 標示類中所有方法都進行事物處理
例子:@transactional
public class testservicebean implements testservice {}
當類中某些方法不需要事物時:
讀取資料庫中的資料時是不需要事務管理的,這種情況下可以使用事務的傳播行為來告訴spring不需要開啟事務,
如:@transactional(propagation = propagation.not_supported)。
@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
髒讀: 乙個事務讀取到另一事務未提交的更新資料
不可重複讀: 在同一事務中, 多次讀取同一資料返回的結果有所不同, 換句話說,
後續讀取可以讀到另一事務已提交的更新資料. 相反, "可重複讀"在同一事務中多次
讀取資料時, 能夠保證所讀資料一樣, 也就是後續讀取不能讀到另一事務已提交的更新資料
幻讀: 乙個事務讀到另乙個事務已提交的insert資料
Spring 使用註解方式進行事物管理
spring 使用註解方式進行事物管理 當標於類前時,標示類中所有方法都進行事物處理 例子 transactional public class testservicebean implements testservice 當類中某些方法不需要事物時 transactional public cla...
Spring 使用註解方式進行事物管理
大家在使用spring的註解式事務管理時,對事務的傳播行為和隔離級別可能有點不知所措,下邊就詳細的介紹下以備方便查閱。事物註解方式 transactional 當標於類前時,標示類中所有方法都進行事物處理 例子 transactional public class testservicebean i...
Spring 使用註解方式進行事物管理
大家在使用spring的註解式事務管理時,對事務的傳播行為和隔離級別可能有點不知所措,下邊就詳細的介紹下以備方便查閱。事物註解方式 transactional 當標於類前時,標示類中所有方法都進行事物處理 例子 transactional public class testservicebean i...