Глава 1 Кварц
1.1 Концепция кварца
Quartz — это проект с открытым исходным кодом Java организации с открытым исходным кодом OpenSymphony, приобретенный Terracotta в 2009 году.официальный сайт кварца
1.2 Основные элементы планирования задач Quartz
- Основными элементами планирования задач Quartz являются:
- Триггер (триггер)
- Планировщик (планировщик задач)
- Работа (задача)
Среди них Trigger и Job — метаданные, а Scheduler — контроллер планирования задач.
1.3 Особенности кварца
- Мощные функции планирования, такие как поддержка различных методов планирования
- Гибкие методы применения, такие как поддержка нескольких комбинаций задач и планирования
- Распределенные и кластерные возможности, расширенные на Quartz после приобретения Terracotta.
1.4 Схема основного элемента кварца
Глава 2 Триггер
2.1 Определение триггера
Триггер, также известный как триггер, используется для определения правил времени планирования задач.
2.2 Свойства триггера
- время начала и время окончания
Все триггеры содержат свойства startTime и endTime. - приоритет
Значение приоритета триггера по умолчанию равно 5, но обратите внимание, что приоритет задается на одно и то же время, а более высокий приоритет запускается первым в то же время. Если один триггер выполняется в 3:00, а другой — в 3:01, то триггер в 3:00 должен выполняться первым. - Стратегия осечки
При планировании задач не гарантируется, что все триггеры сработают в указанное время.Если ресурсов планировщика недостаточно или сервер перезагружен, триггер будет пропущен.
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 потоки делятся на потоки планирования планировщика и потоки выполнения задач. Потоки планирования Планировщика в основном включают в себя: потоки, выполняющие обычное планирование, и потоки, выполняющие триггеры с ошибкой.
Обычный поток планировщика: опрашиваются все триггеры, хранящиеся в хранилище запросов.При достижении времени триггера из пула потоков извлекается свободный поток для выполнения задач, связанных с триггером. Поток планировщика осечки: Поток планировщика осечки сканирует все триггеры, чтобы проверить, есть ли потоки с пропуском запуска, то есть потоки, которые не были пропущены при выполнении.