2012-07-02 99 views
4

正如this帖子中討論的,它是不適合在(因爲在不同的JVM中的多個單一對象的)集羣環境中使用單,這必須是由Spring框架創建單身真。春辛格爾頓集羣環境

如果這是正確的,那麼我們必須非常小心使用Spring框架來使用單例類。你能否告訴我這是否正確理解?

回答

6

這不一定是這種情況。

如果在單獨的JVM上使用單身人士,如果他們的分享了有意義的狀態,則會出現問題。例如,如果兩個單獨的實例存在於同一應用程序的兩個單獨的應用程序服務器上,則存儲和發佈增量ID的單例將非常危險。

在Spring中並沒有什麼內在的東西可以解決這個問題。你的Spring bean(可能是服務)的目標應該是儘可能保持良好的實踐狀態。如果他們需要共享狀態,那麼您將不得不像解決任何其他共享狀態一樣解決此問題。

很多人在集羣環境中使用Spring,並沒有遇到與上述相關的任何問題。我就是其中之一!

+0

這是一箇舊的答案,但線程安全性如何。比方說,我有一個服務代碼中的關鍵部分,由服務類中的鎖保護(鎖對象是一個實例字段)。多個實例會有單獨的鎖嘗試使用相同的資源導致爭用。我對麼? 任何想法,如何處理? –