我正在使用spring 3 Scheduling and Thread Pooling框架。我想以不同的时间/间隔安排不同的任务。我希望每个任务在另一个任务开始之前运行完毕。
即。 如果我有task1和task2: task1每10分钟运行一次,运行时间为1分钟 task2每天运行一次,需要5分钟才能运行。
如果task1和task2计时器同时触发,我希望将task1和task2放在队列中,一次只能取消一个任务。
我知道我可以使用Spring ThreadPoolTaskExecutor设置它,即
<task:executor id="executorWithPoolSizeRange"
pool-size="5-10"
queue-capacity="1"/>
但是我不确定如何将该执行程序挂钩到调度程序中。使用Spring ThreadPoolTaskScheduler时,您只能设置poolSize而不是queueSize
<task:scheduler id="scheduler" pool-size="10"/>
有没有人知道我如何能够一起使用Spring exceutor和scheduler服务来实现我的目标?
答案 0 :(得分:1)
你可以用两种方式做到:
一种是明确指定您的调度程序和taskExecutor作为task:annotation-driven
标记的一部分:
<task:annotation-driven executor="executor" scheduler="scheduler"/>
或者作为计划任务的一部分,您可以注入执行程序并明确地提交给执行人:
executor.execute(myrunnable/callable)