2011-05-21 79 views
5

我希望能夠在我的Spring服務中注入ExecutorService實例,Spring API建議使用ThreadPoolExecutorFactoryBean來實現此目的。非常簡單的問題;我該如何使用ThreadPoolExecutorFactoryBean創建一個ExecutorService,我可以將其連接到其他服務?如何使用Spring的ThreadPoolExecutorFactoryBean工廠bean

對於問他的問題,我覺得自己是一個完全白癡,但我似乎無法解決這個問題。

回答

6

首先,您需要了解FactoryBean是什麼 - 閱讀section 3.8.3的春季文檔。

然後,您閱讀JavadocThreadPoolExecutorFactoryBean並瞭解其功能。

接下來,您將在上下文中配置ThreadPoolExecutorFactoryBean。這將創建ExecutorService(因爲它是FactoryBean,見上),您可以將它注入到bean中。

+0

我不知何故地確信,由工廠bean創建的對象需要被另一個Spring bean包裝。直接注入工作,doh!謝謝=) – tmbrggmn 2011-05-21 18:44:54

6

如果您使用彈簧3,http://blog.espenberntsen.net/2010/03/08/spring-asynchronous-support/,則可以考慮使用@Async。

+0

真的嗎? downvote?我認爲spring的任務命名空間+ @Async註釋使得線程真正處於工作狀態。這可能不是pHk正在尋找的東西,但它仍然是有用的信息。 – Kevin 2011-05-21 18:51:26

+0

+1我喜歡學習更好的解決方案,採取不同於我嘗試遵循的途徑。有時候我會回答「如何將噴槍連接到噴漆器上?」是「不要用油漆刷你的房子!」 – 2011-05-21 19:25:45

+0

我投下了這個票,因爲這可能是有關Spring和多線程的每個問題的答案,並且它實際上不是我的問題的答案。我認爲我的問題具體到足以避免通用答覆。回想起來,也許downvote有點苛刻,我的問題沒有清楚地表明我沒有在尋找關於如何使用Spring進行多線程的一般建議。 – tmbrggmn 2011-05-30 10:16:33

8

要在skaffman's answer擴大,這裏有什麼人需要做一個簡短而親切例如:

<bean id="classNeedingExecutor" class="foo.Bar"> 
    <property name="executor" ref="threadExecutor" /> 
</bean> 

<bean id="threadExecutor" 
    class="org.springframework.scheduling.concurrent.ThreadPoolExecutorFactoryBean"> 
    <property name="corePoolSize" value="1" /> 
    <property name="maxPoolSize" value="1" /> 
</bean> 

另外,請JavaDocs爲可以設置來配置ExecutorService其他屬性的說明。

相關問題