springboot使用事務需要在啟動類上加上開啟事務註解:@enabletransactionmanagement
事物註解方式: @transactional
當標於類前時, 標示類中所有方法都進行事物處理 , 例子:
當標於方法上時, 標示該方法都進行事物處理 , 例子:@service
@transactional
public class logserviceimpl implements logservice
事物傳播行為介紹:/**
* 刪除使用者
* @return
*/@override
@transactional
public void delete(long id)
事物超時設定:@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資料
@transactional註解其他常用引數說明
注意點:readonly:
該屬性用於設定當前事務是否為唯讀事務,設定為true表示唯讀,false則表示可讀寫,預設值為false。例如:@transactional(readonly=true)
rollbackfor:
該屬性用於設定需要進行回滾的異常類陣列,當方法中丟擲指定異常陣列中的異常時,則進行事務回滾。例如:
@transactional(rollbackfor=)
norollbackfor:
該屬性用於設定不需要進行回滾的異常類陣列, 當方法中丟擲指定異常陣列中的異常時,不進行事務回滾。 例如:
@transactional(norollbackfor=)
@transactional 只能被應用到public方法上, 對於其它非public的方法,如果標記了@transactional也不會報錯,但方法沒有事務功能
拓展:
transactional readonly 和 不加transactional的區別:
1.不加@transactional,sql執行的時候是沒有事務的,對於方法內只有一條sql是加與不加結果不影響但是如果乙個方法內執行了多條查詢sql,不加@transactional無法保證資料前後一致性。
例子:乙個方法內有2個同樣乙個sql,當執行完第一條sql時,資料被改掉了,這時如果沒有加@transactional,那麼第二條查詢結果會是被修改後的資料,這樣就出現了類似不可重複讀的情況。
如果加上@transactional,那麼第二條查詢的結果和第一條一樣是修改前的資料,保證資料前後一致性.
2.在資料庫層面已經保證了該sql的原子性.所以如果乙個方法中只有單條sql,不需要加事務,再加事務只會浪費效能。
SpringBoot事務註解詳解
關係型資料庫多用到事務,在傳統專案中使用xml配置,配置雖然也還好,但是看著很不美觀,在使用springboot框架,就簡單的多了,以實戰為準,直接上 transactional spring 事務註解 1.簡單開啟事務管理 enabletransactionmanagement 啟註解事務管理,等...
SpringBoot事務註解詳解
transactional spring 事務註解 1.簡單開啟事務管理 enabletransactionmanagement 啟註解事務管理,等同於xml配置方式的2.事務註解詳解 預設遇到throw new runtimeexception 會回滾 需要捕獲的throw new excepti...
快速上手SpringBoot事務註解
什麼是事務 資料庫事務,是指作為單個邏輯工作單元執行的一系列操作,要麼完全執行,要麼完全不執行 事務的特性 原子性 乙個事務中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。一致性 在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞。隔離性 防止多個事務併發執行時由於交叉執行而...