發現 我們平時使用 分佈式鎖的方式有問題 如: try {} finnally{ 釋放鎖} , 如果方法有事務的話 , 進到finnally 的時候並不代表,數據已經持久化。 會導致鎖提前釋放,正確的做法應該是 事物完成後再釋放鎖。
/**
* 事務結束後釋放鎖
*/
private void unlockAfterTransaction(LockResult lockResult) {
//事物完成後釋放鎖
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCompletion(int status) {
super.afterCompletion(status);
distLockSservice.unlock(lockResult);
}
});
}