Нет необходимости объявлять дополнительный 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>
1 ответ
Общий график
<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-файлов). Вы также можете иметь отдельные пулы потоков для каждого из них (как в примере выше).
Пока вы не хотите иметь логическое разделение между двумя задачами и не хотите иметь отдельные пулы adad для каждой из них, первый подход должен работать для вас.