如何使用Spring的ThreadPoolExecutorFactoryBean工厂bean
我希望能够在我的Spring服务中注入ExecutorService
实例,Spring API建议使用ThreadPoolExecutorFactoryBean
来实现此目的。非常简单的问题;我该如何使用ThreadPoolExecutorFactoryBean
创建一个ExecutorService
,我可以将其连接到其他服务?如何使用Spring的ThreadPoolExecutorFactoryBean工厂bean
对于问他的问题,我觉得自己是一个完全白痴,但我似乎无法解决这个问题。
首先,您需要了解FactoryBean
是什么 - 阅读section 3.8.3的春季文档。
然后,您阅读Javadoc的ThreadPoolExecutorFactoryBean
并了解其功能。
接下来,您将在上下文中配置ThreadPoolExecutorFactoryBean
。这将创建ExecutorService
(因为它是FactoryBean
,见上),您可以将它注入到bean中。
如果您使用弹簧3,http://blog.espenberntsen.net/2010/03/08/spring-asynchronous-support/,则可以考虑使用@Async。
真的吗? downvote?我认为spring的任务命名空间+ @Async注释使得线程真正处于工作状态。这可能不是pHk正在寻找的东西,但它仍然是有用的信息。 – Kevin 2011-05-21 18:51:26
+1我喜欢学习更好的解决方案,采取不同于我尝试遵循的途径。有时候我会回答“如何将喷枪连接到喷漆器上?”是“不要用油漆刷你的房子!” – 2011-05-21 19:25:45
我投下了这个票,因为这可能是有关Spring和多线程的每个问题的答案,并且它实际上不是我的问题的答案。我认为我的问题具体到足以避免通用答复。回想起来,也许downvote有点苛刻,我的问题没有清楚地表明我没有在寻找关于如何使用Spring进行多线程的一般建议。 – tmbrggmn 2011-05-30 10:16:33
要在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
其他属性的说明。
我不知何故地确信,由工厂bean创建的对象需要被另一个Spring bean包装。直接注入工作,doh!谢谢=) – tmbrggmn 2011-05-21 18:44:54