5.9.14.2.1. Регистрация задания

Задания регистрируются в таблице SYS_SCHEDULED_TASK базы данных, соответствующей сущности ScheduledTask. Для работы с заданиями существуют экраны просмотра и редактирования, доступные через меню АдминистрированиеНазначенные задания.

Рассмотрим атрибуты задания:

  • Defined by - каким программным объектом реализуется задание. Возможные значения:

    • Bean - задание реализуется методом бина Spring. Дополнительные атрибуты:

      • Bean name - имя бина.

        Warning

        Бин отображается в списке и доступен для выбора, только если он объявлен в модуле core и у него есть интерфейс, содержащий подходящие для вызова из задания методы. Бины без интерфейса не поддерживаются.

      • Method name - метод интерфейса бина для выполнения. Метод должен либо не иметь параметров, либо иметь все параметры типа String. Тип результата должен быть либо void, либо String. В последнем случае результат выполнения будет сохранен в таблице выполнений (см. Log finish ниже).

      • Method parameters - параметры выбранного метода. Поддерживаются только параметры типа String.

    • Class - задание представляет собой класс, реализующий интерфейс java.util.concurrent.Callable. Класс должен иметь открытый конструктор без параметров. Дополнительные атрибуты:

      • Class name - имя класса

    • Script - задание представляет собой скрипт Groovy. Скрипт выполняется через Scripting.runGroovyScript(). Дополнительные атрибуты:

      • Script name - имя скрипта.

  • User name - имя пользователя, от имени которого будет будет выполняться задание. Если не задано, то задание будет выполнено от имени пользователя, указанного в свойстве приложения cuba.jmxUserLogin.

  • Singleton - признак, является ли задание синглтоном, т.е. выполняющимся только на одном сервере системы.

  • Scheduling type - способ планирования задачи:

    • Cron - с помощью Cron-выражения, представляющего собой последовательность из шести полей, разделенных пробелами: секунда, минута, час, день, месяц, день недели. Месяц и день недели могут быть представлены первыми тремя буквами английского названия. Примеры выражений:

      • 0 0 * * * * - начало каждого часа каждого дня.

      • */10 * * * * * - каждые 10 секунд.

      • 0 0 8-10 * * * - в 8, 9 и 10 часов каждого дня.

      • 0 0/30 8-10 * * * - 8:00, 8:30, 9:00, 9:30 и 10 часов каждого дня.

      • 0 0 9-17 * * MON-FRI - каждый час с 9 до 17 по рабочим дням.

      • 0 0 0 7 1 ? - каждое Рождество в полночь.

    • Period - с помощью интервала между выполнениями.

    • Fixed Delay - задача будет запускаться с указанной в Period задержкой после окончания предыдущего выполнения.

  • Period - период или задержка запуска задания в секундах если Scheduling type установлен в Period или Fixed Delay.

  • Start date - дата/время первого запуска для Scheduling type = Period. Если не установлено, то задание запускается сразу при старте сервера. Если установлено, то задание запускается в момент startDate + period * N, где N - целое число.

    Start date имеет смысл указывать только для "нечастых" заданий - раз в 1 час, 1 сутки и т.п.

  • Timeout - время в секундах, по истечении которого считается, что задание закончило выполнение, независимо от того, есть ли информация о завершении задания, или нет. Если timeout не задан явно, он принимается равным 3 часам.

  • Time frame - в случае заданного Start date или Cron expression определяет временное окно в секундах, в течение которого будет запущено задание, если время startDate + period * N прошло. Если Time frame не задано явно, оно принимается равным period / 2.

    Если Start date не указано, то Time frame не принимается во внимание, т.е. задание будет запущено в любое время после прохождения промежутка времени Period после предыдущего выполнения задания.

  • Start delay - задержка выполнения в секундах после запуска сервера и активации выполнения задач. Используйте данный параметр для тяжелых задач, если вы считаете что они тормозят запуск сервера.

  • Permitted servers - список перечисленных через запятую идентификаторов серверов, на которых возможен запуск данного задания. Если список не задан, то задание может выполняться на любом сервере.

    Для синглтон-заданий порядок перечисления серверов указывает их приоритет - первый имеет больший приоритет чем последний. Сервер с большим приоритетом перехватит выполнение синглтона следующим образом: если сервер с большим приоритетом обнаруживает, что предыдущий раз задание было выполнено сервером с меньшим приоритетом, то он запускает задание независимо от того, пройден ли Period или нет.

Warning

Приоритет серверов работает только в случае Scheduling type равного Period и не указанного атрибута Start date. В противном случае, старт происходит в одно и то же время, и перехват невозможен.

  • Log start - признак регистрации факта запуска задания в таблице SYS_SCHEDULED_EXECUTION, соответствующей сущности ScheduledExecution.

    Если задание является синглтоном, то в текущей реализации регистрация факта запуска производится в любом случае, независимо от данного признака.

  • Log finish - признак регистрации факта завершения задания в таблице SYS_SCHEDULED_EXECUTION, соответствующей сущности ScheduledExecution.

    Если задание является синглтоном, то в текущей реализации регистрация факта завершения производится в любом случае, независимо от данного признака.

  • Description - произвольное текстовое описание задания.

Задание также имеет признак активности, который устанавливается в экране списка заданий. Неактивные задания не запускаются.