声明额外的TaskScheduler

声明额外的TaskScheduler

我发现不需要声明额外的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>

最佳答案

普通时间表

<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"/>


上面使用了一个scheduler,还告诉我计划中有两个任务,它们都有自己的预定义固定延迟。这两个任务都有可能和/或单个任务的两次出现会相互重叠。
在这种情况下,它们将在大小为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,每个任务都有一个任务。
您可以将不同的schedulers放置到不同的上下文xml文件中(如果您有多个上下文xml)。
您还可以为每个线程池拥有单独的线程池(如上例所示)。

只要您不希望两个任务之间有逻辑上的分离,并且您不想为每个任务都有单独的主题库,则第一种方法应该适合您。

07-24 20:13