簡體   English   中英

掛起的@transactional 方法會阻塞資源嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM