队列大小为1的Spring调度

时间:2012-10-30 17:54:28

标签: java spring

我正在使用spring 3 Scheduling and Thread Pooling框架。我想以不同的时间/间隔安排不同的任务。我希望每个任务在另一个任务开始之前运行完毕。

即。 如果我有task1和task2: task1每10分钟运行一次,运行时间为1分钟 task2每天运行一次,需要5分钟才能运行。

如果task1和task2计时器同时触发,我希望将task1和task2放在队列中,一次只能取消一个任务。

我知道我可以使用Spring ThreadPoolTask​​Executor设置它,即

<task:executor id="executorWithPoolSizeRange"
               pool-size="5-10"
               queue-capacity="1"/>

但是我不确定如何将该执行程序挂钩到调度程序中。使用Spring ThreadPoolTask​​Scheduler时,您只能设置poolSize而不是queueSize

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

有没有人知道我如何能够一起使用Spring exceutor和scheduler服务来实现我的目标?

1 个答案:

答案 0 :(得分:1)

你可以用两种方式做到:

一种是明确指定您的调度程序和taskExecutor作为task:annotation-driven标记的一部分:

<task:annotation-driven executor="executor" scheduler="scheduler"/>

或者作为计划任务的一部分,您可以注入执行程序并明确地提交给执行人:

executor.execute(myrunnable/callable)