spring-boot-starter-quartz
Для удовлетворения требований бизнеса, для springboot была выполнена простая упаковка quartz, превратив его в модуль стартера SpringBoot. Основные функции включают:
Последующее расширение функций продолжается...
Вот как использовать этот проект:
<dependency>
<groupId>com.github.quartz</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
<version>1.0</version>
</dependency>
compile('com.github.quartz:spring-boot-starter-quartz:1.0')
В настоящее время предоставляются три аннотации для автоматического включения конфигурации: @EnableQuartz, @EnableQuartzBean и @EnableQuartzDataBase.
@EnableQuartz: включает всю автоматическую конфигурацию.
@EnableQuartzBean: включает удалённый вызов клиента Quartz.
@EnableQuartzDataBase: включает клиент Quartz для удалённого вызова и базовую конфигурацию bean-компонентов Quartz.
Скрипт можно найти в корневом каталоге пакета выпуска.
Соответствующие таблицы кварцевых кластеров можно найти в каталоге org.quartz.impl.jdbcjobstore пакета выпуска Quartz.
Официальный адрес исходного кода Quartz: [https://github.com/quartz-scheduler/quartz/blob/master/quartz-core/src/main/resources/org/quartz/impl/jdbcjobstore].
— Вот пример скрипта Oracle:
Таблица конфигурации задач (QRTZ_TIMED_TASK)
-- CREATE TABLE
CREATE TABLE QRTZ_TIMED_TASK
(
TASK_NAME VARCHAR2(200),
TASK_DESC VARCHAR2(500),
TASK_EXPRES VARCHAR2(100),
TASK_METHOD VARCHAR2(200),
TASK_CLASS VARCHAR2(200),
TASK_GROUP VARCHAR2(200) DEFAULT 0,
STATUS VARCHAR2(100) DEFAULT 'U',
CREATE_TIME DATE DEFAULT SYSDATE,
CREATER VARCHAR2(200),
MODIFY_TIME DATE DEFAULT SYSDATE,
MODIFIER VARCHAR2(200)
);
-- ADD COMMENTS TO THE COLUMNS
COMMENT ON COLUMN QRTZ_TIMED_TASK.TASK_NAME
IS '任务名称';
COMMENT ON COLUMN QRTZ_TIMED_TASK.TASK_DESC
IS '任务描述';
COMMENT ON COLUMN QRTZ_TIMED_TASK.TASK_EXPRES
IS '任务执行表达式';
COMMENT ON COLUMN QRTZ_TIMED_TASK.TASK_METHOD
IS '任务执行方法';
COMMENT ON COLUMN QRTZ_TIMED_TASK.TASK_CLASS
IS '任务接口路径';
COMMENT ON COLUMN QRTZ_TIMED_TASK.TASK_GROUP
IS '任务分组';
COMMENT ON COLUMN QRTZ_TIMED_TASK.STATUS
IS '任务状态';
COMMENT ON COLUMN QRTZ_TIMED_TASK.CREATE_TIME
IS '创建时间';
COMMENT ON COLUMN QRTZ_TIMED_TASK.CREATER
IS '创建人员';
COMMENT ON COLUMN QRTZ_TIMED_TASK.MODIFY_TIME
IS '修改时间';
COMMENT ON COLUMN QRTZ_TIMED_TASK.MODIFIER
IS '修改人员';
-- CREATE/RECREATE PRIMARY, UNIQUE AND FOREIGN KEY CONSTRAINTS
ALTER TABLE QRTZ_TIMED_TASK
ADD PRIMARY KEY (TASK_NAME)
USING INDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE
(
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
);
-- CREATE INDEX
CREATE INDEX IDX_TIMED_STATUS ON QRTZ_TIMED_TASK (STATUS)
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
);
Таблица параметров задач (QRTZ_TIMED_TASK_PARAM)
-- CREATE TABLE
CREATE TABLE QRTZ_TIMED_TASK_PARAM
(
PARAM_KEY VARCHAR2(100) NOT NULL,
PARAM_VALUE VARCHAR2(1000) NOT NULL,
PARAM_TYPE VARCHAR2(100),
PARAM_DESC VARCHAR2(1000),
TASK_NAME VARCHAR2(200) NOT NULL,
SORT_ID INTEGER DEFAULT 0
);
-- ADD COMMENTS TO THE COLUMNS
COMMENT ON COLUMN QRTZ_TIMED_TASK_PARAM.PARAM_KEY
IS '参数代码';
COMMENT ON COLUMN QRTZ_TIMED_TASK_PARAM.PARAM_VALUE
IS '参数值';
COMMENT ON COLUMN QRTZ_TIMED_TASK_PARAM.PARAM_TYPE
IS '参数类型(不填默认为STRING类型)';
COMMENT ON COLUMN QRTZ_TIMED_TASK_PARAM.PARAM_DESC
IS '参数描述';
COMMENT ON COLUMN QRTZ_TIMED_TASK_PARAM.TASK_NAME
IS '任务名称';
COMMENT ON COLUMN QRTZ_TIMED_TASK_PARAM.SORT_ID
IS '参数顺序';
-- CREATE/RECREATE PRIMARY, UNIQUE AND FOREIGN KEY CONSTRAINTS
ALTER TABLE QRTZ_TIMED_TASK_PARAM
ADD PRIMARY KEY (PARAM_KEY, TASK_NAME)
USING INDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE
(
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
);
-- CREATE INDEX
CREATE INDEX IDX_TIMED_TASK_PARAM_NAME ON QRTZ_TIMED_TASK_PARAM (TASK_NAME)
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
);
~~~ **Параметры, по умолчанию используется LinkedHashMap для хранения.**
Можно реализовать универсальный интерфейс через параметры и различные конфигурации параметров для реализации многозадачности интерфейса.
**4. Разработка задачи интерфейса**
Разработка задач должна соответствовать следующим стандартам:
* название интерфейса задачи должно начинаться с заглавной буквы I, заканчиваться SV;
* класс реализации интерфейса должен начинаться без I в начале, затем добавлять Impl после SV;
* методы интерфейса должны иметь параметр типа Map.
Например:
```java
public interface IHelloSV {
void hello();
void hello(Map param);
}
public class HelloSVImpl implements IHelloSV {
public void hello() {}
public void hello(Map param) {}
}
```
**5. Конфигурация задачи**
При настройке задачи необходимо следовать следующим требованиям:
* сначала настроить класс интерфейса;
* если необходимо настроить параметры интерфейса, укажите имя параметра, значение параметра и task_name в таблице параметров;
* при настройке параметров тип параметра может быть пустым, по умолчанию принимается Map<String, String> для получения, при указании типа параметра используется Map<String, Object> для получения, а в коде можно использовать принудительное преобразование типов;
* тип параметра поддерживает только базовые типы, используйте полный путь при настройке.
Пример:
```sql
INSERT INTO QRTZ_TIMED_TASK (TASK_NAME, TASK_DESC, TASK_EXPRES, TASK_METHOD, TASK_CLASS, TASK_GROUP, STATUS)
VALUES ('hello1', '测试1', '0/10 * * * * ?', 'hello', 'com.IHelloSV', 'hello', 'U');
INSERT INTO QRTZ_TIMED_TASK (TASK_NAME, TASK_DESC, TASK_EXPRES, TASK_METHOD, TASK_CLASS, TASK_GROUP, STATUS)
VALUES ('hello2', '测试2', '0/10 * * * * ?', 'hello', 'com.IHelloSV', 'hello', 'U');
INSERT INTO QRTZ_TIMED_TASK_PARAM (PARAM_KEY, PARAM_VALUE, PARAM_TYPE, PARAM_DESC, TASK_NAME)
VALUES ('name', 'admin', 'java.lang.String', '测试参数', 'hello2');
```
**6. Конфигурация Quartz**
В этом проекте по умолчанию используется конфигурация Quartz для одного компьютера. Конкретная конфигурация находится в файле quartz.properties в корневом каталоге пакета выпуска. Если вы хотите использовать кластерную конфигурацию, вы можете создать файл quartz.properties в пути к классам вашего собственного проекта для настройки.
**7. Динамическое обновление задач**
* Добавление задачи
После добавления конфигурации задачи в таблицу QRTZ_TIMED_TASK измените поле STATUS на S.
* Удаление задачи
Измените поле STATUS данных, которые необходимо удалить из таблицы QRTZ_TIMED_TASK, на D.
* Изменение задачи
Задача поддерживает изменение только следующих элементов:
QRTZ_TIMED_TASK.TASK_EXPRES,
QRTZ_TIMED_TASK_PARAM.PARAM_KEY,
QRTZ_TIMED_TASK_PARAM.PARAM_VALUE,
QRTZ_TIMED_TASK_PARAM.PARAM_TYPE,
QRTZ_TIMED_TASK_PARAM.PARAM_DESC.
Примечание: если вы изменяете только QRTZ_TIMED_TASK, только TASK_EXPRES вступает в силу; если вы изменяете конфигурацию QRTZ_TIMED_TASK_PARAM, другие конфигурации QRTZ_TIMED_TASK также могут быть изменены.
**8. Введение в связанные таблицы кластера Quartz**
qrtz_fired_triggers — таблица, связанная с триггером, хранит информацию о состоянии, связанном с запущенным триггером Trigger, и информацию об исполнении Job.
qrtz_simple_triggers — хранит простой Trigger, включая количество повторов, интервал и количество запусков.
qrtz_simprop_triggers
qrtz_cron_triggers — хранит CronTrigger, включая выражение Cron и информацию о часовом поясе.
qrtz_blob_triggers — Trigger хранится как тип Blob (используется, когда пользователь JDBC создаёт свой собственный тип Trigger, а JobStore не знает, как его хранить).
qrtz_triggers — хранит настроенную информацию Trigger.
qrtz_job_details — хранит подробную информацию о каждой настроенной Job.
qrtz_calendars — хранит информацию календаря Quartz как тип Blob, Quartz может настроить календарь для указания временного диапазона.
qrtz_paused_trigger_grps — хранит информацию о приостановленных группах Trigger.
qrtz_locks — хранит неблокирующую информацию программы (если используется пессимистическая блокировка).
qrtz_scheduler_state — хранит небольшое количество информации о состоянии Scheduler (если используется в кластере).
**9. Выражение времени Quartz**
Формат времени: s>m>h>d>m>w(?)>y(?) соответствует: секунды>минуты>часы>дни>месяцы>недели>годы.
Символы и формат выражения Cron:
| Символ | Значение |
| :--: | :--------------------------------------- |
| * | Соответствует всем значениям. Например, * в поле минут означает каждую минуту |
| ? | Используется только в полях даты и недели. Он используется для обозначения «неопределённого значения» |
| - | Указывает диапазон. Например, 10-12 в поле часов означает от 10 до 12 часов |
| , | Указывает несколько значений. Например, MON,WED,FRI в поле недели означает понедельник, среду и пятницу |
| / | Указывает приращение. Например, 0/15 в поле секунд означает начало с 0 секунд и выполнение каждые 15 секунд. Символ * перед / эквивалентен 0 перед / |
| L | Обозначает день месяца и день недели, но имеет разное значение в двух полях. Например, день месяца в поле дня месяца. Если в поле дня недели добавить число, это означает последние несколько дней месяца, например, 6L означает последнюю неделю месяца |
| W | Разрешено появляться только в поле даты. Этот символ используется для указания ближайшего рабочего дня. Например, если вы пишете 15W в поле даты, это означает ближайший рабочий день 15-го числа этого месяца. Поэтому, если 15-е число — суббота, задача будет запущена 14-го числа. Если 15-е — воскресенье, задача будет выполнена в следующий понедельник, то есть 16-го числа |
| LW | L и W можно комбинировать в поле даты. LW представляет последний рабочий день этого месяца |
| # | Разрешается появляться только в поле недели. Этот символ используется для указания определённого дня в этом месяце. Например: 6#3 означает третью неделю месяца, которая является пятницей (6 означает пятницу, 3 означает третью неделю). 2#1 означает первый день второй недели месяца, который является понедельником. 4#5 означает пятый день четвёртой недели месяца, который является средой |
| C | Разрешено в полях даты и недели. Этот символ зависит от указанного «календаря». То есть значение этого выражения зависит от результата вычисления связанного «календаря», если нет связанного «календаря», это эквивалентно всем связанным «календарям». Например: поле даты — 5C, что означает первый или пятый день после первого дня связанного «календаря» или первый день этого месяца. Поле недели — 1C, что означает первый день или первый день после первого дня связанного «календаря», то есть воскресенье |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )