當事務遇見多執行緒

2021-10-03 05:23:00 字數 722 閱讀 2159

開發小夥伴遇到線上環境訊息推送不成功,排查日誌發現推送是id為null

@transactional

(rollbackfor = exception.

class

)public

void

register

(userdto dto)

通過**分析,按照程式**執行,插入使用者能產生資料,但推送id為空,就是事務執行完成是,多執行緒已經執行。

1.多執行緒延時執行,等事務執行完成。

2.去掉事務

@transactional註解屬性就是來控制事務屬性的。通過這些屬性來生成事務。

@transactional註解在外部呼叫的函式上才有效果,內部呼叫的函式新增無效。這是由aop的特性決定的。 如果你在protected、private 或者預設可見性的方法上使用 @transactional 註解,這將被忽略,也不會丟擲任何異常。預設情況下,只有來自外部的方法呼叫才會被aop**捕獲,也就是,類內部方法呼叫本類內部的其他方法並不會引起事務行為,即使被呼叫方法使用

@transactional的函式呼叫有@transactional的函式的時候,進入第二個函式的時候是新的事務,還是沿用之前的事務。稍不注意就會拋unexpectedrollbackexception異常。

先讚後看,養成習慣。歡迎收看乙個行走的熊貓程式猿,下期再見

spring多執行緒事務控制

主要測試內容是兩個執行緒同時對乙個表操作時,後乙個ccc類中的select之後commit,是否會對aaa類的insert操作rollback產生影響。測試結果是互不影響。spring xml 配置檔案 xmlns xsi xsi schemalocation spring beans 3.0.xs...

多執行緒與事務併發

多執行緒與事務併發 在實際問題中,不要在事件處理執行緒中做任何主要工作,而應當使用另外的執行緒作為工作執行緒,並允許事件處理執行緒快速地返回到處理事件等待狀態 這句話看起來非常有道理,多執行緒的優點要充分體現!那麼執行緒處理要完成的工作以及業務要處理的工作如何劃分?實際上這個問題可以歸結為控制驅動體...

Junit在多執行緒中遇見的坑

junit使用注意事項 junit單元測試不支援多執行緒。當新建執行緒,junit單元測試在主線程執行結束後就關閉,不會等子執行緒執行結束。main方法則不會存在這樣的問題。方法1 使用junit做多執行緒測試,發現程式並不會卡在讀的執行緒中,理論上到讀執行緒獲取到鎖後,由於沒有外界條件操作,是卡死...