代码之家  ›  专栏  ›  技术社区  ›  bernardo

无需声明额外的TaskScheduler

  •  1
  • bernardo  · 技术社区  · 6 年前

    我发现不需要声明额外的TaskScheduler,我可以执行以下任务:

    <task:scheduled-tasks>
       <task:scheduled ref="runScheduler1" method="run" cron="*/5 * * * * *" />
       <task:scheduled ref="runScheduler2" method="run" cron="*/5 * * * * *" />
    </task:scheduled-tasks>
    

    但是你能帮我解释一下吗, 为什么不需要像下面这样?

    <task:scheduled-tasks>
       <task:scheduled ref="runScheduler1" method="run" cron="*/5 * * * * *" />
    </task:scheduled-tasks>
    <task:scheduled-tasks>
       <task:scheduled ref="runScheduler2" method="run" cron="*/5 * * * * *" />
    </task:scheduled-tasks>
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Amit Phaltankar    6 年前

    公共调度

    <task:scheduled-tasks>
       <task:scheduled ref="runScheduler1" method="run" cron="*/5 * * * * *" />
       <task:scheduled ref="runScheduler2" method="run" cron="*/5 * * * * *" />
    </task:scheduled-tasks>
    

    本部分定义了一个 scheduler 其中包含两项任务。这两项任务将彼此独立执行(根据其定义的时间表)。 有一个 scheuler 如果有多个任务,它不仅可以将它们分组在一起,还可以让您控制两个任务共用的线程池。

        <task:scheduled-tasks scheduler="myScheduler">
            <task:scheduled ref="runScheduler1" method="run" fixed-rate="5000"  />
            <task:scheduled ref="runScheduler2" method="run" fixed-delay="500"  />
        </task:scheduled-tasks>
    
        <task:scheduler id="myScheduler" pool-size="5"/>
    

    以上使用一个 调度程序 并且还告诉我,在我的计划中有两个任务具有它们自己预定义的固定延迟。两个任务和/或一个任务的两个事件可能相互重叠。 在这种情况下,这些将在大小为5的线程池下并发运行。


    单独的计划程序

    <task:scheduled-tasks>
       <task:scheduled ref="runScheduler1" method="run" cron="*/5 * * * * *" />
    </task:scheduled-tasks>
    <task:scheduled-tasks>
       <task:scheduled ref="runScheduler2" method="run" cron="*/5 * * * * *" />
    </task:scheduled-tasks>
    

    然而,在本例中,有两个单独的 schedulers 每个任务中有一个任务。 您可以放置不同的 调度程序 到不同的上下文xml文件(如果您有多个上下文xml)。 您还可以为每个线程池都提供单独的线程池(如上面的示例所示)。

    只要您不想在两个任务之间进行逻辑上的分离,也不想为每个任务都有单独的thead池,那么第一种方法应该适合您。

    推荐文章