2010-02-11 60 views
3

我們有一個spring應用程序(單線程設計)。我們希望將其調整爲多線程。一個想法是創建一個父線程併產生不同的線程,這些線程將實例化他們自己的應用上下文並且並行運行。 (到目前爲止,內存和CPU不是問題)。我不確定春天如何實現單身。 Spring會使用靜態引用並返回它,或者使用某種類型的緩存/映射(它是非靜態的/非單一的和上下文相關的)在哪裏進行查找?這將幫助我決定是否更改config-xml。請任何想法。跨多個應用程序上下文的單條Spring bean

+0

順便說一句 - 你想要跨越上下文_share_單身人士,或者你想爲每個上下文使用不同的signletons? – Bozho 2010-02-11 18:38:27

+0

不,我不想跨上下文共享對象,我想讓不同的線程使用不同的對象組。我面臨的挑戰是整合日誌和數據庫事務。我不想受到對象級互斥體的困擾,而不是現在至少。如果我要設置singleton = false,我必須對整個框架進行更改,但我不太確定 – questzen 2010-02-11 18:43:40

回答

5

Spring singleton bean在每個應用程序上下文中被實例化一次。也就是說,如果你從同一個配置創建了許多應用程序上下文,他們將擁有不同的單例bean實例。

如果您希望他們共享一個singleton bean的單個實例,您可以在父應用程序上下文中聲明它,並在創建它們時爲其提供多個上下文。

+0

+1,但這裏使用術語單例是有誤導性的。它們是應用程序上下文範圍內的單例,但不能超出這個範圍。 – 2010-02-11 20:33:56

2

爲什麼需要多個應用程序上下文來使應用程序成爲多線程?多線程可以很好地使用相同的上下文。

更新:Take a look at spring batch

+1

這將涉及引入同步部分,這是一個痛點,特別是對於沒有單元測試的代碼 – questzen 2010-02-11 18:33:52

+0

如果要修改相同的數據,則無法避免同步部分。 – Bozho 2010-02-11 18:38:05

1

在我看來,你真的需要看看你的單身豆實際上正在做什麼它們的功能將在多線程環境。我不會嘗試更新您的應用程序上下文以適應您的線程模型,而是要使bean的生命週期合適。

  • 如果他們是真正的單身人士,並且本質上是線程安全的,那麼就像多線程一樣使用它們。
  • 如果它們不是線程安全的,那麼它們是否應該在你的新的多線程實現中繼續使用spring singleton?將它們更新爲每個線程實例化的非單例bean,然後嘗試將整個應用程序上下文與特定線程綁定可能更有意義。
相關問題