我正在使用一個標記為事務的 api。它在內部使用可完成的未來來保持異步。所以 api 看起來像:
@Transactional
public Response executeJob (Request request){
//check if job is already in progress using db read
//if not -> create new job put it in progress and start
//if previously failed -> update job status to in progress and restart
//update job status in DB
//submit job to completable future -> preforms lots of db reads and writes
//return Response details
}
問題:如果大量用戶同時觸發請求,我們將獲得重復記錄。
我嘗試在互聯網上搜索,但無法理解交易和可完成的未來將如何在這里作業。我的意思是一旦回應回傳或可完成的未來完成,交易就會結束。
uj5u.com熱心網友回復:
關鍵觀察:我自己使用虛擬 api 嘗試了幾個案例。在可完成的未來的情況下,總是為新執行緒啟動一個新事務。不管它是否被事務注釋,如果它被事務方法呼叫,它將為此執行緒創建一個新事務。如果我們使用這個可完成的未來回傳的結果,也可能是最初開始的事務已經完成,現在如果我們嘗試持久化需要在事務中的東西,它可能會因沒有活動事務存在而失敗。如果這在任何地方似乎不正確,或者是否需要更清晰,請告訴我
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/372978.html
