2012-10-30 20 views
0

我正在使用spring 3 Scheduling和Thread Pooling框架。我想在不同的时间/间隔安排不同的任务。我希望每个任务在另一个任务启动之前运行完成。队列大小为1的弹簧调度

I.E. 如果我有task1和task2: task1每10分钟运行一次,需要1分钟运行 task2每天运行一次,需要5分钟运行。

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

我知道我可以设置这个了一个春天ThreadPoolTask​​Executor类,即

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

但是我不知道如何挂钩的是执行到调度。当使用弹簧ThreadPoolTask​​Scheduler你只能设置poolSize不是QUEUESIZE以及

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

没有人有任何想法,我怎么可能可以使用Spring exceutor和调度服务一起实现我的目标?

回答

1

你可以做到这一点有两种方式:

一是显式指定调度和taskExecutor的为task:annotation-driven标签的一部分:

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

或者为你的计划任务的一部分,你可以注入在执行人并明确向执行人提交:

executor.execute(myrunnable/callable)