Spring迴圈體內的事務控制

2021-07-30 12:17:56 字數 875 閱讀 8886

spring的事務隔離級別等不介紹了

在spring的事務應用中,有時候需要用到迴圈體內單個控制事務,每一次迴圈與上次迴圈不交叉影響,單獨提交或回滾,不影響整個迴圈體。

//開啟事務

@transactional(propagation = propagation.required)

public result generatemeteringmonthlybill() catch (exception e)

}return ret

;}

由於spring的事務傳播級別是類級別,如果類中的乙個方法使用的某乙個型別的事務,那麼整個類的事務都是一種事務,而且回滾級別也是類級別的,也就是在同乙個類中a方法呼叫b方法,a方法使用required,b方法使用的requires_new,在b方法丟擲runtimeexception,在a方法中捕獲,回滾點不是到b方法,而是b方法不進行回滾,因為spring事務認定級別以類為單位,所以只有退出類的呼叫時,對會觸發事務的提交或回滾。所以即使在同個類中呼叫不同的事務級別,也是沒有意義的。因為spring 事務**類執行方法的切入點是類:

spring **執行方法(1):

protected object invokewithintransaction(method method, class<?> targetclass, final invocationcallback invocation)

throws throwable

鑑於這個原因,解決方法需要在迴圈體內的進行單獨事務控制的方法,放在乙個a類中,包含迴圈體的方法放在乙個b類中,這個a類中方法使用requires_new事務控制,b類使用required事務控制。這樣就解決了迴圈體內的相互影響

Spring 事務 事務控制

0 註解 autowire 自動注入 url url b 1 spring專案中事務手動回滾 b transactionaspectsupport.currenttransactionstatus setrollbackonly 或者丟擲異常 transactional rollbackfor pu...

spring 的事務控制

在spring開發過程中,我們用在類上打上 transactional 標籤來宣告當前類是乙個事務來控制的 當然也可以直接放在方法上 因為有service間的互相呼叫,導致多個事務操作同一張表的情況,目前解決就是把方法移到同一service中處理。還有乙個問題就是當service處理過程中報錯,事物...

spring 事務控制

事務配置 二 在service加try 導致事務不回滾 註明 一般service不要加 try public class userserviceimpl catch exception e 三 解決方案 方法1 在service不加try,方法2 在 catch語句中最後增加throw new ru...