近期有位同事看了我的定時器**,提醒我乙個隱藏bug——spring事務
在方法內呼叫事務,事務無法生效!於是我開始測試與整理spring事務中可能遇到的坑
如下**,在類內部呼叫事務是不會生效的,因為沒有走類**!事務是切在類上,只有通過呼叫類.方法
才會走spring的事務管理!
@component
public
class
timertest
@transactional
public
void
test()
agent.quick******dao.
update
("update qhb_star_user set is_del = 2 where seq_id=8298");
}}
1、首先要看資料庫本身對應的庫、表所設定的引擎是什麼。myisam不支援事務,如果需要,則必須改為innnodb。
2、@transactional所註解的方法是否為public
3、@transactional所註解的方法所在的類,是否已經被註解@service或@component等。
4、需要呼叫該方法,且需要支援事務特性的呼叫方是在在 @transactional所在的類的外面。注意:類內部的其他方法呼叫這個註解了@transactional的方法,事務是不會起作用的。
5、註解為事務範圍的方法中,事務的回滾僅僅對於unchecked的異常有效。對於checked異常無效。也就是說事務回滾僅僅發生在出現runtimeexception或error的時候。
如果希望一般的異常也能觸發事務回滾,需要在註解了@transactional的方法上,將@transactional回滾引數設為:
@transactional(rollbackfor=exception.class)
6、非springboot專案,需要檢查spring配置檔案xml中:
(1)掃瞄包範圍是否配置好,否則不會在啟動時spring容器中建立和載入對應的bean物件。
(2)事務是否已經配置成開啟
對於事務一定要重視,重視,再重視!為什麼?作為程式設計師,這還需要解釋麼?
spring 事務使用的坑
1 業務背景介紹 1 tomcat集群通過資料庫的唯一索引來處理併發問題,比如username的唯一性,這樣業務 裡面可以不需要寫同步邏輯 2 儲存使用者的業務邏輯使用事務,先儲存使用者資訊,再統計新增使用者數,這個時候新增使用者數和資料庫中的有效資料記錄會不一致,2 原因分析 儲存使用者的業務邏輯...
Spring 宣告式事務的幾個使用的坑
1.demo位址 github位址 2.事務不生效 spring 預設通過動態 的方式實現 aop,對目標方法進行增強,private 方法無法被 到,spring 自然也無法動態增強事務處理邏輯 一 事務不生效 1 spring 預設通過動態 的方式實現 aop,對目標方法進行增強,private...
Spring事務(一) Spring事務的使用
事務的經典舉例 某人要在商店使用電子貨幣購買100元的東西,當中至少包括兩個操作 該人賬戶減少100元 商店賬戶增加100元 事務就是要確保以上兩個操作 都能完成 或者 一起取消,否則就會出現100元平白消失或出現的情況。摘自wiki spring事務有兩種方式 程式設計式事務管理 宣告式事務管理 ...