🎉Добро пожаловать в рубрику архитектурного дизайна~Весна Boot интегрирует Xxl-job для выполнения потрясающих запланированных задач.
В современной разработке приложений запланированные задачи являются неотъемлемой частью. Чтобы более эффективно управлять этими задачами и отслеживать их, мы обычно используем отличные системы планирования запланированных задач. Xxl-job — одна из хорошо принятых платформ, которая обеспечивает визуальный интерфейс управления задачами, распределенное планирование задач, ведение журнала выполнения и другие функции. В этой статье вы шаг за шагом познакомитесь с интеграцией Xxl-job в проект Spring Boot для создания потрясающей системы запланированных задач.
При выборе структуры запланированных задач нам необходимо учитывать некоторые ключевые факторы, и Xxl-job как раз отвечает этим потребностям:
Во-первых, в Spring Boot Добавить в проект Xxl-job зависимость. существовать pom.xml
Добавьте в файл следующие зависимости:
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.0</version>
</dependency>
Xxl-job База данных необходима для хранения информации о задачах и журналов выполнения. существовать Spring Boot проект application.properties
(или application.yml
)Добавить в файл Конфигурация базы данных:
# Конфигурация базы данных
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
Xxl-job Предусмотрен сценарий инициализации для создания необходимых таблиц базы данных. существовать resources
Создайте каталог с именем xxl-job.sql
Содержимое файла следующее:
-- xxl-job.sql
CREATE TABLE `xxl_job_qrtz_lock` (
`lock_name` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
`lock_value` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`lock_grant` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`lock_thread` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`lock_name`),
UNIQUE KEY `idx_lock_name` (`lock_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `xxl_job_qrtz_triggers` (
`trigger_name` varchar(80) COLLATE utf8mb4_unicode_ci NOT NULL,
`trigger_group` varchar(80) COLLATE utf8mb4_unicode_ci NOT NULL,
`job_name` varchar(80) COLLATE utf8mb4_unicode_ci NOT NULL,
`job_group` varchar(80) COLLATE utf8mb4_unicode_ci NOT NULL,
`next_fire_time` bigint(13) DEFAULT NULL,
`prev_fire_time` bigint(13) DEFAULT NULL,
`priority` integer(11) DEFAULT NULL,
`trigger_state` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL,
`trigger_type` varchar(8) COLLATE utf8mb4_unicode_ci NOT NULL,
`start_time` bigint(13) NOT NULL,
`end_time` bigint(13) DEFAULT NULL,
`calendar_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`misfire_instr` integer(11) DEFAULT NULL,
`job_data` blob,
PRIMARY KEY (`trigger_name`,`trigger_group`),
FOREIGN KEY (`job_name`,`job_group`) REFERENCES `xxl_job
_qrtz_jobs` (`job_name`,`job_group`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `xxl_job_qrtz_jobs` (
`job_name` varchar(80) COLLATE utf8mb4_unicode_ci NOT NULL,
`job_group` varchar(80) COLLATE utf8mb4_unicode_ci NOT NULL,
`desc` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`add_time` bigint(13) DEFAULT NULL,
`update_time` bigint(13) DEFAULT NULL,
`author` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`alarm_email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`executor_route_strategy` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`executor_handler` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`executor_param` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`executor_block_strategy` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`executor_fail_retry_count` int(11) DEFAULT NULL,
`child_jobid` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`trigger_status` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`job_name`,`job_group`),
KEY `idx_qrtz_jobs_group` (`job_group`),
FOREIGN KEY (`job_group`) REFERENCES `xxl_job_qrtz_job_groups` (`job_group`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `xxl_job_qrtz_job_groups` (
`job_group` varchar(80) COLLATE utf8mb4_unicode_ci NOT NULL,
`desc` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`add_time` bigint(13) DEFAULT NULL,
`update_time` bigint(13) DEFAULT NULL,
`author` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`job_group`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Это таблицы базы данных, необходимые для Xxl-задания. В них будет храниться информация о задачах, журналы выполнения и другие связанные данные.
существовать Spring Boot проект application.properties
(или application.yml
)Добавить в файл Xxl-job Связанная конфигурация:
# xxl-jobКонфигурация
xxl.job.admin.addresses=http://localhost:8080/xxl-job-admin
xxl.job.accessToken=
xxl.job.executor.appname=your-app-name
xxl.job.executor.address=http://localhost:8080/xxl-job-executor
xxl.job.executor.ip=
xxl.job.executor.port=0
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
xxl.job.executor.logretentiondays=3
xxl.job.admin.addresses
:Xxl-job Admin из Адрес доступа для управления задачей.xxl.job.accessToken
:Xxl-job Executor Токен доступа для простой аутентификации.xxl.job.executor.appname
:Название привода,Используется для различения различных приводов.xxl.job.executor.address
:приводизадрес,Обычно текущий адрес проекта.xxl.job.executor.ip
:привод IP Адрес, автоматическое получение локальной машины, когда она пуста IP。xxl.job.executor.port
:приводпорт,0 Представляет случайный порт.xxl.job.executor.logpath
:привод Путь журнала。xxl.job.executor.logretentiondays
:привод Дни хранения журналов。существовать Spring Boot В проекте нам необходимо создать логику выполнения запланированных задач. Сначала создайте класс задачи и реализуйте IJobHandler
интерфейс:
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;
@Component
public class MyJobHandler {
@XxlJob("myJobHandler")
public ReturnT<String> myJobHandler(String param) {
// Логический код задачи
System.out.println("запланированные выполнение задачи, параметры: " + param);
return ReturnT.SUCCESS;
}
}
В этом классе задач есть использование @XxlJob
Как комментировать теги myJobHandler
,Метод - это то, что мы иззапланированные задача логика. параметр param
Параметр запланированной задачи.
сейчассуществовать,Можно начать Spring Boot проект. Когда проект запускается, Xxl-job Executor будет автоматически зарегистрирован в Admin середина,изапланированные задачи Волясуществовать Регулированиеизвремя исполнения。
Откройте браузер и посетите Xxl-job Admin адрес (по умолчанию http://localhost:8080/xxl-job-admin
)。существоватьна интерфейсе,Вы увидите понятный интерфейс для управления задачами,Здесь можно добавлять, редактировать и отслеживать задачи.
Xxl-job предоставил API,Позволяет существовать динамически добавлять и удалять задачи во время работы. существуют в практическом применении,Возможно, нам придется динамически корректировать задачи в зависимости от потребностей бизнеса.,без остановки всего приложения.
Ниже приведен простой пример, демонстрирующий, как добавить задачу с помощью API Xxl-job:
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class DynamicJobHandler {
@Autowired
private XxlJobService xxlJobService;
@XxlJob("dynamicJobHandler")
public ReturnT<String> dynamicJobHandler(String param) {
// Логический код задачи
System.out.println("динамичныйзапланированные выполнение задачи, параметры: " + param);
return ReturnT.SUCCESS;
}
// Динамически добавлять задачи
public void addDynamicJob() {
XxlJobInfo jobInfo = new XxlJobInfo```java
.setJobGroup("YOUR_JOB_GROUP")
.setJobDesc("Пример динамической задачи")
.setExecutorRouteStrategy(ExecutorRouteStrategyEnum.FIRST.name())
.setExecutorHandler("dynamicJobHandler")
.setExecutorParam("параметр")
.setExecutorBlockStrategy(ExecutorBlockStrategyEnum.SERIAL_EXECUTION.name())
.setExecutorFailRetryCount(3);
ReturnT<String> addResult = xxlJobService.addJob(jobInfo);
if (addResult.getCode() == ReturnT.SUCCESS_CODE) {
System.out.println("Динамическая задача успешно добавлена, JobId:" + addResult.getContent());
} else {
System.out.println("Не удалось добавить динамическую задачу, сообщение об ошибке:" + addResult.getMsg());
}
}
// Динамически удалять задачи
public void removeDynamicJob(int jobId) {
ReturnT<String> removeResult = xxlJobService.removeJob(jobId);
if (removeResult.getCode() == ReturnT.SUCCESS_CODE) {
System.out.println("Динамическая задача успешно удалена");
} else {
System.out.println("Ошибка динамического удаления задачи, сообщение об ошибке:" + removeResult.getMsg());
}
}
существуют В этом примере мы создаем DynamicJobHandler
класс, содержащий динамическую задачу dynamicJobHandler
。Позвонив xxlJobService.addJob
Метод, мы можем добавлять задачи динамически. Аналогично, позвонив xxlJobService.removeJob
метод,Может Динамически удалять задачи。так,Мы можем существовать гибко выполнять задачи по мере необходимости во время работы приложения.
Из этой вводной статьи вы узнали, как существовать Spring Boot Интегрировать в проект Xxl-job,и Реализуйте потрясающие запланированные задачи。Xxl-job богатый функционал и визуальный интерфейс, что делает запланированные задачи разработки и управления стали проще. Возможность динамического добавления и удаления задач также дает нам большую гибкость.
Надеюсь, вы сможете понять и использовать эту статью. Xxl-job полезный。запланированные задача — важная часть любого приложения, которое может включать в себя: выберите ту, которая подходит именно вам. Рамка задачи очень важнаиз. Учитывая все обстоятельства Xxl-job Я считаю, что благодаря простоте использования и мощным функциям он станет вашим лучшим выбором для запланированных задач.