2017-07-15 55 views
0

我正在實施從銀行賬戶轉移資金到另一個銀行賬戶。我的問題是,如果我有@Transactional註釋(來自guice)我必須使用同步嗎?事務是否確保另一個線程不會訪問資源?JAVA,GUICE交易和轉賬時同步

@Transactional(rollbackOn = RuntimeException.class) 
    synchronized public void transfer(@NonNull final Transfer transfer) {   
     withdrawFromOwnerAccount(ownerAccount, transfer.getAmount()); 
     depositToReceiverAccount(receiverAccount, transfer.getAmount()); 

    } 
+0

只是爲了澄清,這是一個Singleton中的方法嗎?你在單身人士中使用實例變量嗎? – aschoerk

回答

-1

「UnitOfWork是線程安全的,可以緩存多個用途或直接注入單例。」 see

因此,我的回答是肯定的。

順便說一句。同步只有在線程處理同一個對象時纔有效,(Singleton?)。

重要的是底層的dbms可以以安全的方式處理事務。我假設使用了一種mysql或postgres。框架應確保用於執行事務和數據庫操作的連接在一個事務中僅在一個線程中使用。這是一個相當簡單的要求,並且在Java服務器中處理相當安全已有20年。

+0

https://google.github.io/guice/api-docs/latest/javadoc/index.html?com/google/inject/persist/Transactional.html @Transanctonal中UnitOfWork的定義在哪裏?所以你的答案是假設很多,並且引用甚至在相關文檔中都沒有的東西,這是你如何處理其他人的錢? – efekctive

+0

@efekctive請點擊鏈接 – aschoerk

+0

請閱讀問題和文檔。工作單元的代碼不使用@Transactional。請留下我一個人,更好地研究你的答案 – efekctive