鎖在事務中的錯誤使用

2021-09-03 02:01:20 字數 598 閱讀 2159

鎖在事務中的錯誤使用

錯誤示例:

@override

@transactional(rollbackfor = exception.class)

public item add(itemdto dto) throws exception else

return item;

} finally

}

事務的範圍大於鎖的範圍,鎖釋放的瞬間可能事務還沒來的及提交,看原始碼:

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

throws throwable

catch (throwable ex)

finally

//提交事務

committransactionafterreturning(txinfo);

return retval;

}

所以要保證執行緒安全鎖應該加在事務之外

跳過事務複製中的錯誤

前些天部署了一套事務複製環境,訂閱端只需要最近五年的資料。複製採用的是備份檔案初始化,複製搭好後用了乙個指令碼在訂閱端刪除五年前的資料。導致堆積了大量的未分發命令。解決方案1 根據在分發資料庫上執行 sp helpsubscriptionerrors publisher publisher publ...

JDBC中事務的使用

當jdbc程式向資料庫獲得乙個connection物件時,預設情況下這個connection物件會自動向資料庫提交在它上面傳送的sql語句。若想關閉這種預設提交方式,讓多條sql在乙個事務中執行,並且保證這些語句是在同一時間共同執行的時,我們就應該為這多條語句定義乙個事務。其中,銀行轉賬這一事例,最...

JDBC中事務的使用

當jdbc程式向資料庫獲得乙個connection物件時,預設情況下這個connection物件會自動向資料庫提交在它上面傳送的sql語句。若想關閉這種預設提交方式,讓多條sql在乙個事務中執行,並且保證這些語句是在同一時間共同執行的時,我們就應該為這多條語句定義乙個事務。其中,銀行轉賬這一事例,最...