Кварц выполняет задание только в одном потоке, когда есть несколько кварцевых потоков.

Мне было интересно, можно ли настроить кварц для выполнения длительного задания обработки только в одном потоке в любой момент времени. Другими словами, скажем, у меня есть кварц, настроенный с SimpleThreadPool размера 5. И у меня есть задание, которое запускается каждые 10 секунд, но в определенных ситуациях это может занять больше 10 секунд. Есть ли способ настроить кварцевый триггер / задание / планировщик, чтобы этот триггер не срабатывал снова, поскольку он уже находится в рабочем состоянии в другом потоке. Когда триггер срабатывает снова, другой поток из пула подхватит его и одновременно запустит два экземпляра одного и того же задания. Спасибо за ваш вклад.

Уточнение: (предложения по использованию пула резьбы размера 1). Требуется настроить пул потоков с 5 потоками и иметь любое отдельное задание для выполнения только в одном потоке в любой момент времени, другими словами, экземпляр задания должен выполняться только одним потоком.


person John    schedule 02.08.2011    source источник
comment
как насчет уменьшения размера пула до 1?   -  person fmucar    schedule 03.08.2011


Ответы (2)


Если вы используете Quartz 1.x, сделайте класс Job реализацией StatefulJob. Если вы используете Quartz 2.x, добавьте аннотацию @DisallowConcurrentExecution к классу задания.

person jhouse    schedule 05.08.2011
comment
Что мы можем сделать, если задание является универсальным классом? Вместо этого это должно быть указано в описании работы. - person djmj; 14.06.2019

установленный

org.quartz.threadPool.threadCount=1

Будет только один кварцевый рабочий поток за раз

person blob    schedule 04.08.2011