Открываем проект Ruoyi и видим на странице модуль запланированных задач.
Следующим шагом будет анализ всех файлов, связанных с проектом Ruoyi и запланированными задачами, а также того, как он реализует синхронизацию. Какова логика, лежащая в основе этого? Если я хочу реализовать эту логику в своем собственном проекте, что мне нужно скопировать? файл или изменить его, чтобы реализовать эту функцию синхронизации в моем собственном проекте.
В этом модуле есть все, что связано с таймингом. Мы просто хотим посмотреть, как в этом модуле реализована функция тайминга.
Первый — реализовать функцию синхронизации, тогда придется использовать сторонние зависимости. Давайте сначала посмотрим, какие сторонние зависимости вводятся в pom-файл.
В этом модуле представлен только сторонний jar-пакет синхронизации. Наш код использует некоторые API в этом jar-пакете для реализации функции синхронизации. В настоящее время представлена баночная упаковка для каждого.
Эта функция времени требует двух таблиц
Таблица журнала планирования запланированных задач sys_job_log Расписание запланированных задач sys_job
Правильно, проект Ruoyi опирается на эти две таблицы для реализации функции синхронизации.
Ниже приведены классы сущностей, соответствующие таблице.
Начинаем с операций на странице и анализируем логику соответствующих операций.
Что касается реализации функции синхронизации, то на самом деле она заключается в использовании отражения для выполнения конкретных методов, поскольку когда мы добавляем новую задачу, мы уже прописали абсолютный путь к методу, а затем на основе этого абсолютного будет найден соответствующий метод. путь в коде, а затем выполните этот метод, используя отражение для выполнения метода.
Для вновь добавленной страницы после написания соответствующего содержимого нажмите «ОК», и запланированное задание будет сохранено.
Откроем f12 и посмотрим какой интерфейс будет вызываться при добавлении нового
В нашем коде найдите этот интерфейс
Этот интерфейс получен в виде класса сущности
Переданное значение
Давайте войдем в класс сущности и посмотрим, что представляет каждый атрибут.
Значением этого вызывающего метода является имя класса.имя метода.
/** вызвать целевую строку нет параметров ryTask.ryNoParams Есть параметры ryTask.ryParams('ry')
* Несколько параметров ryTask.ryMultipleParams('ry', true, 2000L, 316.50D, 100) */
@Excel(name = "вызвать целевую строку -- Это имя исполняемого метода")
private String invokeTarget;
/** стратегия планирования cron */
@Excel(name = «Планируйте стратегию ", readConverterExp = «0=по умолчанию, 1=запустить выполнение немедленно, 2=запустить выполнение один раз, 3=не запускать немедленное выполнение»)
private String misfirePolicy = ScheduleConstants.MISFIRE_DEFAULT;
/** Выполнять ли одновременно (0 позволяет 1 Запрещено) */
@Excel(name = «Совместное исполнение», readConverterExp = «0=разрешено, 1=запрещено»)
private String concurrent;
/** Статус задачи (0 нормальный 1 пауза) */
@Excel(name = «статус задачи», readConverterExp = «0=нормально, 1=пауза»)
private String status;
Эта новая логика только сохраняет информацию о задаче в базе данных и помещает ее в объект планировщика;
Просто нажмите кнопку «Изменить», и информация о задаче отобразится во всплывающем окне.
Это просто база данных запросов для отображения, никакой логики
Просто нажмите кнопку «Изменить», чтобы обновить информацию базы данных в соответствии с идентификатором задачи;
В объекте планировщика также обновляется информация о задаче;
Экземпляр планировщика запустится автоматически после запуска Springboot.