我们可以创建一个Spring ScheduledExecutorTask池吗?

时间:2011-01-12 21:42:44

标签: java spring scheduled-tasks

我正在尝试查看是否有可能创建一个Spring ScheduledExecutor池。我需要的是设置一个ScheduledExecutor任务,它将定期执行某些任务。我试图使用以下方式:

<bean id="contentProcessorPool"
    class="org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean">
<property name="poolSize" value="${processor.corepoolsize}"/>
<property name="continueScheduledExecutionAfterException" value="true"/>
<property name="scheduledExecutorTasks">
  <list>
    <ref local="processor"/>
  </list>
</property>

<bean id="processor"
    class="org.springframework.scheduling.concurrent.ScheduledExecutorTask">
<property name="delay" value="${processor.polling.delay}"/>
<property name="period" value="${processor.polling.period}"/>

<property name="runnable">
  <ref local="contentWorker" />
</property>

 <bean id="contentWorker" class="com.autodesk.contentextraction.processor.ContentWorker">
</bean>

但这会创建一个ContentWorker实例,该实例将以指定的时间间隔继续运行。我想要的是在给定间隔后运行的一组ContentWorker。

任何指针都将受到高度赞赏。

由于

2 个答案:

答案 0 :(得分:3)

这个怎么样?

<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="someObject" method="someMethod" fixed-delay="5000"/>
</task:scheduled-tasks>

<task:scheduler id="myScheduler" pool-size="10"/>

来源:http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/scheduling.html#scheduling-task-namespace-scheduled-tasks

答案 1 :(得分:1)

如果您使用固定费率而不是固定延迟,则操作将在该时间间隔发生,而不是在完成后续操作之后。我不会想到你之后需要(手动)汇集它吗?

如果您不需要在上下文文件中进行显式控制,则可以注释该类:

import org.springframework.stereotype.Service
org.springframework.scheduling.annotation.Scheduled

Class annotation: @Service 
Method annotation: @Scheduled(fixedRate=30000)

上下文:

xmlns:task="http://www.springframework.org/schema/task"

http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd

<task:annotation-driven />