2015-04-03 125 views
2

我們在我們的代碼中有以下方法,它有Transactional註釋並被同步。Spring中的同步交易方法

@Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class) 
public synchronized void addValueToDB(String value, int parent) { 
    int nextId = getNextIDUsingSequence(); 
    insertIntoDB(nextId, value); 
    updateLeft(parent); 
    updateRight(parent); 
} 

現在,作爲Transactional標註在數據庫的方法完成後提交等等這種方法同步似乎對我沒用? Spring會提供任何解決方案嗎?還是應該同步調用此方法的塊?

+0

你解決問題了嗎?你能分享你的解決方案嗎?謝謝。 – 2015-08-31 03:23:44

+0

@PedroPedruzzi我們所做的是,我們將服務層中的塊與該方法被調用的位置同步。 – 2015-09-01 04:18:26

回答

0

而不是使「getNextIdUSingSequnence」方法同步。事務註釋將處理addValueToDb方法。

2

交易和同步是兩個不同的東西:

  1. 一個TX(交易)意味着你的代碼不會看到運行alongsde它的其他的TX的效果(在一定程度上...)但不會阻止其他TX運行。例如你可以嘗試修改2 TX中的同一個數據庫行。一個(第一個提交)會成功,另一個會失敗。

  2. 同步會阻止多線程同時執行您的方法(在您的類的同一實例上,您的類是單例?)。它提供了更強大的隔離

你需要決定你需要將2

+0

這些是兩種不同的東西,但我們都需要。所以問題是應該在哪裏同步? (或者泉是否提供任何解決方案?) – 2015-04-03 07:13:26