Введение в принцип Quartz структуры планирования задач

задняя часть

Глава 1 Кварц

1.1 Концепция кварца

Quartz — это проект с открытым исходным кодом Java организации с открытым исходным кодом OpenSymphony, приобретенный Terracotta в 2009 году.официальный сайт кварца

1.2 Основные элементы планирования задач Quartz

Основными элементами планирования задач Quartz являются:
Триггер (триггер)
Планировщик (планировщик задач)
Работа (задача)

Среди них Trigger и Job — метаданные, а Scheduler — контроллер планирования задач.

1.3 Особенности кварца

  1. Мощные функции планирования, такие как поддержка различных методов планирования
  2. Гибкие методы применения, такие как поддержка нескольких комбинаций задач и планирования
  3. Распределенные и кластерные возможности, расширенные на Quartz после приобретения Terracotta.

1.4 Схема основного элемента кварца

Quartz基本元素关系图

Глава 2 Триггер

2.1 Определение триггера

Триггер, также известный как триггер, используется для определения правил времени планирования задач.

2.2 Свойства триггера

  1. время начала и время окончания
    Все триггеры содержат свойства startTime и endTime.
  2. приоритет
    Значение приоритета триггера по умолчанию равно 5, но обратите внимание, что приоритет задается на одно и то же время, а более высокий приоритет запускается первым в то же время. Если один триггер выполняется в 3:00, а другой — в 3:01, то триггер в 3:00 должен выполняться первым.
  3. Стратегия осечки
    При планировании задач не гарантируется, что все триггеры сработают в указанное время.Если ресурсов планировщика недостаточно или сервер перезагружен, триггер будет пропущен.

2.3 Типы триггеров

В планировщике задач Quartz основными триггерами Trigger являются: SimpleTrigger, CalendarIntervelTrigger, DailyTimeIntervalTrigger, CronTrigger. Обратите внимание, что все триггеры, представленные в этом блоге, основаны на версии Quartz 2.2.x. Различные версии имеют несколько разные типы триггеров.

2.3.1 SimpleTrigger

SimpleTrigger — это базовый триггер, который указывает задачу, которая должна выполняться через определенный интервал времени, начиная с определенного времени.

Свойства SimpleTrigger:
RepeatInterval интервал повторения
RepeatCount повторяет указанное количество раз, фактическое количество выполнений — repeatCount+1.
simpleSchedule()
    //.withIntervalInHours(1) //每小时执行一次
    .withIntervalInMinutes(1) //每分钟执行一次
    //.repeatForever() //次数不限
    .withRepeatCount(10) //次数为10次
    .build();//构建
2.3.2 CalendarIntervalTrigger

Разница между CalendarIntervalTrigger и SimpleTrigger заключается в том, что указанный временной интервал равен миллисекундам, а единицы интервала, поддерживаемые CalendarIntervalTrigger, — секунды, минуты, часы, дни, месяцы, годы и недели.

Свойства CalendarIntervalTrigger:
интервал выполнения интервал
intervalUnit Единица интервала выполнения (секунды, минуты, часы, дни, месяцы, годы, недели)
calendarIntervalSchedule()
    .withIntervalInDays(1) //每天执行一次
    //.withIntervalInWeeks(1) //每周执行一次
    .build();
2.3.3 DailyTimeIntervalTrigger

Разница между DailyTimeIntervalTrigger и SimpleTrigger заключается в том, что SimpleTrigger не только поддерживает типы временных интервалов, но также поддерживает указание недель.

Свойства DailyTimeIntervalTrigger:
startTimeOfDay время начала дня
endTimeOfDay конечное время дня
daysOfWeek неделя, которую необходимо выполнить
интервал выполнения интервал
intervalUnit Единица интервала выполнения (секунды, минуты, часы, дни, месяцы, годы, недели)
RepeatCount количество повторений
dailyTimeIntervalSchedule()
    .startingDailyAt(TimeOfDay.hourAndMinuteOfDay(9, 0)) //第天9:00开始
    .endingDailyAt(TimeOfDay.hourAndMinuteOfDay(15, 0)) //15:00 结束 
    .onDaysOfTheWeek(MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY) //周一至周五执行
    .withIntervalInHours(1) //每间隔1小时执行一次
    .withRepeatCount(100) //最多重复100次(实际执行100+1次)
    .build();
2.3.4 CronTrigge

CronTrigger подходит для более сложных задач, поддерживает синтаксис Linux Cron. CronTrigger покрывает большинство функций трех вышеупомянутых триггеров.

Свойства CronTrigger только; : выражение Cron, выражение Cron должно быть написано программистом, что более сложно

cronSchedule("0 0/3 9-15 * * ?") // 每天9:00-15:00,每隔3分钟执行一次
    .build();

cronSchedule("0 30 9 ? * MON") // 每周一,9:30执行一次
.build();

weeklyOnDayAndHourAndMinute(MONDAY,9, 30) //等同于 0 30 9 ? * MON 
    .build();

Cron-выражения

Место расположения область времени разрешение особая ценность
1 Второй 0-59 ,- * /
2 минута 0-59 ,- * /
3 Час 0-23 ,- * /
4 Дата 1-31 ,- * ? / L W C
5 месяц 1-12 ,- * /
6 Неделю 1-7 ,- * ? / L C #
7 год (необязательно) 1-31 ,- * /

Звездочка (): может использоваться во всех полях для обозначения каждого момента в соответствующей временной области, например, в поле минут это означает «каждую минуту»;

Вопросительный знак (?): этот символ используется только в полях даты и недели, обычно он указывается как «бессмысленное значение», эквивалентное точке;

Знак минус (-): укажите диапазон, например, используя «10-12» в поле часа, это означает от 10 до 12 часов, то есть 10,11,12;

Запятая (,): Выразите значение списка, например, используя «ПН, СР, ПТ» в поле недели, это означает понедельник, среду и пятницу;

Косая черта (/): x/y выражает последовательность равных шагов, где x — начальное значение, а y — значение возрастающего шага. Если использование 0/15 в поле минут означает 0, 15, 30 и 45 секунд, а 5/15 в поле минут означает 5, 20, 35, 50, вы также можете использовать */y, что эквивалентно 0/y ;

L: Этот символ используется только в полях даты и недели и означает «последний», но в этих двух полях он имеет разное значение. В поле даты буква L представляет последний день месяца, например, 31 января и 28 февраля в невисокосные годы; если буква L используется в качестве недели, она представляет субботу, что эквивалентно 7. Однако, если L появляется в поле дня недели и ему предшествует значение X, это означает «последние X дней месяца», например, 6L означает последнюю пятницу месяца;

W: Этот символ может появляться только в поле даты.Это модификация начальной даты, указывающая ближайший рабочий день к дате. Например, 15W представляет рабочий день, ближайший к 15-му числу месяца.Если 15-е число месяца — суббота, оно соответствует пятнице 14-го числа, если 15-е число — воскресенье, оно соответствует понедельнику 16-го числа, если 15-е число — вторнику, результат 15 № вторник. Однако следует отметить, что связанная дата сопоставления не может охватывать месяцы.Например, если вы укажете 1W, если 1-е число — суббота, результат будет соответствовать понедельнику 3-го числа, а не последнему дню предыдущего месяца. Строка W может указывать только одну дату, а не диапазон дат;

Комбинация LW: LW можно использовать в комбинации в поле даты, что означает последний рабочий день месяца;

Знак решетки (#): этот символ можно использовать только в поле дня недели для обозначения дня недели месяца. Например, 6#3 представляет собой третью пятницу текущего месяца (6 представляет пятницу, а #3 представляет собой текущую третью), а 4#5 представляет пятую среду текущего месяца, при условии, что в текущем месяце нет пятой среды. , игнорировать его и не запускать;

C: Этот символ используется только в полях даты и недели, что означает «Календарь». Это означает дату, с которой связан план, или, если дата не связана, она эквивалентна всем датам в календаре. Например, 5C в поле даты эквивалентно первому дню после 5-го числа в календаре. 1С эквивалентно первому дню после воскресенья в поле дня недели.

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

Глава 3 Планировщик (планировщик задач)

3.1 Определение планировщика

Scheduler — это контроллер планирования задач, который состоит из двух важных компонентов: ThreadPool и JobStore.

Примечание. Задание и триггер необходимо сохранить, прежде чем их можно будет использовать.

ThreadPool — это пул потоков, все задачи будут выполняться пулом потоков

JobStore используется для хранения информации о времени выполнения, включая Trigger, Scheduler, JobDetail, бизнес-блокировки и многое другое. Реализации JobStore включают RAMJob (реализация памяти), JobStoreTX (JDBC, транзакции управляются Quartz), JobStoreCMT (JDBC, с использованием транзакций контейнера), ClusteredJobStore (реализация кластера) и т. д.

Примечание. Задание и триггер необходимо сохранить, прежде чем их можно будет использовать.

3.2 Типы расписаний

Существует три типа расписания:
StdScheduler
RemoteMBeanScheduler
RemoteScheduler

Среди них чаще всего используется StdScheduler.

3.3 Фабрика расписаний

Расписание создается фабрикой расписаний, есть DirectSchedulerFactory или StdSchedulerFactory, используется еще StdSchedulerFactory

Глава 4 Работа (задача)

4.1 Определение работы

Работа: то есть запланированная задача

4.2 Типы работ

Есть два типа рабочих мест: без гражданства и с сохранением состояния.

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

4.3 Атрибуты работы

Есть два атрибута Иова: изменчивость и долговечность.

изменчивость указывает, сохраняется ли задача в хранилище базы данных;
Устойчивость указывает, сохраняется ли она без связи с триггером.
И волатильность, и долговечность являются булевыми типами.

Глава 5 Кварцевые нити

5.1 Классификация кварцевой резьбы

В Quartz потоки делятся на потоки планирования планировщика и потоки выполнения задач. Потоки планирования Планировщика в основном включают в себя: потоки, выполняющие обычное планирование, и потоки, выполняющие триггеры с ошибкой.

Обычный поток планировщика: опрашиваются все триггеры, хранящиеся в хранилище запросов.При достижении времени триггера из пула потоков извлекается свободный поток для выполнения задач, связанных с триггером. Поток планировщика осечки: Поток планировщика осечки сканирует все триггеры, чтобы проверить, есть ли потоки с пропуском запуска, то есть потоки, которые не были пропущены при выполнении.

Приложение: Ссылки

www.xuxueli.com/xxl-job/#/

блог woo woo woo.cn на.com/drift-ice/afraid…

Woohoo. IBM.com/developer Я…