[英]Does suspended @transactional method block resource?
AFAIK outer
方法和inner
方法在數據庫級別的 2 個不同事務中運行(因為 REQUIRES_NEW)。 outer
方法進行更新並等待inner
方法提交。 這是否意味着在inner
提交之前outer
持有用戶資源鎖?
@Autowired
private TestDAO testDAO;
@Autowired
private SomeBean someBean;
@Override
@Transactional(propagation=Propagation.REQUIRED)
public void outerMethod(User user) {
testDAO.updateUser(user);
someBean.innerMethod();
}
一些豆類:
@Override
@Transactional(propagation=Propagation.REQUIRES_NEW)
public void innerMethod() {
//some work
}
更新:
這是否可以像打開 2 個數據庫控制台一樣呈現,然后一一鍵入並運行:
1. begin # 1st console
2. update user set...# 1st console
3. 4. 5. begin ...#do some work; commit; # 2nd console
6. commit; # 1st console
事務本身不負責鎖定行或表。 如果 dao 執行的 sql 正在鎖定正在更新的行,那么該鎖定將一直保持到事務完成或超時。 更新可能使用樂觀鎖定,在這種情況下沒有持有鎖。 因此,僅查看此代碼不足以判斷是否有東西被鎖定。
但是,是的,在事務中鎖定代碼的任何數據庫級別都會持續到事務完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.