Как очистить триггеры в кварцевом планировщике - PullRequest
3 голосов
/ 29 октября 2010

Если у меня работает планировщик Quartz с кучей триггеров, и я хочу очистить все триггеры, как лучше это сделать?

Я рассмотрел итерацию по группам и именам, вызывая незапланированное по ходу дела, но это кажется очень медленным, когда есть тысячи триггеров на месте (около 2 с, чтобы незапланировать 10 триггеров).

Элементарный тестовый пример (триггеры по расписанию 1000, пакеты по 100 удаляются) показывает экспоненциальную сложность w.r.t. количество запланированных триггеров для внеплановой операции:

Deleted 100 triggers in 3594ms,35.94 triggers/ms
Deleted 100 triggers in 2734ms,13.67 triggers/ms
Deleted 100 triggers in 2453ms,8.176666666666666 triggers/ms
Deleted 100 triggers in 1985ms,4.9625 triggers/ms
Deleted 100 triggers in 1547ms,3.094 triggers/ms
Deleted 100 triggers in 1281ms,2.135 triggers/ms
Deleted 100 triggers in 1047ms,1.4957142857142858 triggers/ms
Deleted 100 triggers in 765ms,0.95625 triggers/ms
Deleted 100 triggers in 485ms,0.5388888888888889 triggers/ms
Deleted 100 triggers in 156ms,0.156 triggers/ms

Я не могу найти какие-либо массовые методы, чтобы разобраться.

Наконец-то я подумал о том, чтобы остановить планировщик и освободить его для сбора мусора, но я не уверен, что есть еще что-то, что мне может понадобиться, чтобы убедиться, что на него нигде не ссылаются.

Кто-нибудь получил представление о лучшем подходе здесь?

Ответы [ 2 ]

2 голосов
/ 13 января 2011

Сколько триггеров и заданий у вас будет?

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

Рассматривали ли вы магазин баз данных? Вы могли бы извлечь выгоду из способности SQL работать с набором данных и удалять всю группу триггеров или все триггеры, соответствующие шаблону с помощью одной команды.

1 голос
/ 29 октября 2010

Я думаю, что вам лучше всего использовать метод shutdown планировщика.Вы можете позвонить scheduler.shutdown(true), если хотите, чтобы все выполняемые в данный момент задания заканчивались до выключения планировщика.Согласно Quartz API , вызов shutdown очищает все ресурсы, связанные с планировщиком .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...