Spring Boot интегрирует Xxl-job для выполнения потрясающих запланированных задач.
Spring Boot интегрирует Xxl-job для выполнения потрясающих запланированных задач.
Каталог статей

    • Почему стоит выбрать Xxl-job?
    • Начать интеграцию Xxl-job
      • Шаг 1. Добавьте зависимости
      • Шаг 2. Настройте источник данных
      • Шаг 3. Инициализация таблиц базы данных
      • Шаг 4. Настройте Xxl-задание
      • Шаг 5. Напишите запланированные задачи
      • Шаг 6: Запустите проект
      • Шаг 7: Доступ к администратору Xxl-job
    • Расширение: динамически добавлять и удалять задачи.
    • Подвести итог

🎉Добро пожаловать в рубрику архитектурного дизайна~Весна Boot интегрирует Xxl-job для выполнения потрясающих запланированных задач.



В современной разработке приложений запланированные задачи являются неотъемлемой частью. Чтобы более эффективно управлять этими задачами и отслеживать их, мы обычно используем отличные системы планирования запланированных задач. Xxl-job — одна из хорошо принятых платформ, которая обеспечивает визуальный интерфейс управления задачами, распределенное планирование задач, ведение журнала выполнения и другие функции. В этой статье вы шаг за шагом познакомитесь с интеграцией Xxl-job в проект Spring Boot для создания потрясающей системы запланированных задач.

Почему стоит выбрать Xxl-job?

При выборе структуры запланированных задач нам необходимо учитывать некоторые ключевые факторы, и Xxl-job как раз отвечает этим потребностям:

  1. Визуальный интерфейс управления:Xxl-job Обеспечить интуитивно понятный и простой в использовании из Визуальный интерфейс управления, позволяющий удобно управлять и контролировать запланированные задачи。
  2. Распределенное планирование задач:Для распределенных систем,Xxl-job предоставилмощныйиз Распределенное планирование Возможности решения задач позволяют легко реализовать распределение и выполнение задач, существующих в кластере.
  3. Журнал выполнения задач:Xxl-job поддерживать Журнал выполнения запись и просмотр задач, что помогает своевременно обнаруживать и решать проблемы при выполнении задач.
  4. Динамически добавлять и удалять задачи:Xxl-job Позволяет существовать динамически добавлять и удалять задачи во время работы без остановки всего приложения.

Начать интеграцию Xxl-job

Шаг 1. Добавьте зависимости

Во-первых, в Spring Boot Добавить в проект Xxl-job зависимость. существовать pom.xml Добавьте в файл следующие зависимости:

Язык кода:javascript
копировать
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.0</version>
</dependency>
Шаг 2. Настройте источник данных

Xxl-job База данных необходима для хранения информации о задачах и журналов выполнения. существовать Spring Boot проект application.properties(или application.yml)Добавить в файл Конфигурация базы данных:

Язык кода:javascript
копировать
# Конфигурация базы данных
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
Шаг 3. Инициализация таблиц базы данных

Xxl-job Предусмотрен сценарий инициализации для создания необходимых таблиц базы данных. существовать resources Создайте каталог с именем xxl-job.sql Содержимое файла следующее:

Язык кода:javascript
копировать
-- 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-задания. В них будет храниться информация о задачах, журналы выполнения и другие связанные данные.

Шаг 4. Настройте Xxl-задание

существовать Spring Boot проект application.properties(или application.yml)Добавить в файл Xxl-job Связанная конфигурация:

Язык кода:javascript
копировать
# 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:привод Дни хранения журналов。
Шаг 5. Напишите запланированные задачи

существовать Spring Boot В проекте нам необходимо создать логику выполнения запланированных задач. Сначала создайте класс задачи и реализуйте IJobHandler интерфейс:

Язык кода:javascript
копировать
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 Параметр запланированной задачи.

Шаг 6: Запустите проект

сейчассуществовать,Можно начать Spring Boot проект. Когда проект запускается, Xxl-job Executor будет автоматически зарегистрирован в Admin середина,изапланированные задачи Волясуществовать Регулированиеизвремя исполнения。

Шаг 7: Доступ к администратору Xxl-job

Откройте браузер и посетите Xxl-job Admin адрес (по умолчанию http://localhost:8080/xxl-job-admin)。существоватьна интерфейсе,Вы увидите понятный интерфейс для управления задачами,Здесь можно добавлять, редактировать и отслеживать задачи.

Расширение: динамически добавлять и удалять задачи.

Xxl-job предоставил API,Позволяет существовать динамически добавлять и удалять задачи во время работы. существуют в практическом применении,Возможно, нам придется динамически корректировать задачи в зависимости от потребностей бизнеса.,без остановки всего приложения.

Ниже приведен простой пример, демонстрирующий, как добавить задачу с помощью API Xxl-job:

Язык кода:javascript
копировать
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 Я считаю, что благодаря простоте использования и мощным функциям он станет вашим лучшим выбором для запланированных задач.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose