2011-05-21 81 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其他属性的说明。

相关问题