有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

队列大小为1的java Spring调度

我正在使用Spring3调度和线程池框架。我想在不同的时间/间隔安排不同的任务。我希望在开始另一项任务之前,每个任务都运行到完成

即。 如果我有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时,只能设置池大小,不能设置队列大小

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

有人知道我怎样才能使用Spring exceutor和scheduler服务来实现我的目标吗


共 (1) 个答案

  1. # 1 楼答案

    你可以通过两种方式做到:

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

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

    或者,作为计划任务的一部分,您可以插入executor并明确提交给executor:

    executor.execute(myrunnable/callable)