spring事務上的坑(90 的程式設計師不知道)

2021-09-23 17:25:10 字數 1141 閱讀 8108

近期有位同事看了我的定時器**,提醒我乙個隱藏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事務有兩種方式 程式設計式事務管理 宣告式事務管理 ...