Нет необходимости объявлять дополнительный 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 для каждой из них, первый подход должен работать для вас.

Другие вопросы по тегам