1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/spring-boot-starter-spring-boot-starter-quartz

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

spring-boot-starter-quartz

Для удовлетворения требований бизнеса, для springboot была выполнена простая упаковка quartz, превратив его в модуль стартера SpringBoot. Основные функции включают:

  1. Динамическое обновление, добавление, остановка и немедленное выполнение задач.
  2. Немедленное выполнение задачи.
  3. Настраиваемая реализация включения/выключения узлов кварцевого кластера.

Последующее расширение функций продолжается...

Вот как использовать этот проект:

1. Импортируйте пакет spring-boot-starter-quartz

  • Maven:
<dependency>
    <groupId>com.github.quartz</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
    <version>1.0</version>
</dependency>
  • Gradle:
compile('com.github.quartz:spring-boot-starter-quartz:1.0')

2. Включите автоматическую настройку Quartz

В настоящее время предоставляются три аннотации для автоматического включения конфигурации: @EnableQuartz, @EnableQuartzBean и @EnableQuartzDataBase.

@EnableQuartz: включает всю автоматическую конфигурацию.

@EnableQuartzBean: включает удалённый вызов клиента Quartz.

@EnableQuartzDataBase: включает клиент Quartz для удалённого вызова и базовую конфигурацию bean-компонентов Quartz.

3. Таблица конфигурации задач

Скрипт можно найти в корневом каталоге пакета выпуска.

Соответствующие таблицы кварцевых кластеров можно найти в каталоге 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Используя функцию автоконфигурации SpringBoot, в соответствии с бизнес-сценарием компании разработайте модуль Quartz Starter для более гибкой и удобной интеграции Quartz в SpringBoot. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/spring-boot-starter-spring-boot-starter-quartz.git
git@api.gitlife.ru:oschina-mirror/spring-boot-starter-spring-boot-starter-quartz.git
oschina-mirror
spring-boot-starter-spring-boot-starter-quartz
spring-boot-starter-spring-boot-starter-quartz
master