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

OSCHINA-MIRROR/agile-framework-agile-task

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

Компонент задачи расписания: agile-task

Spring Maven

Какова его роль

  • Устойчивое хранение периодических задач Данные задач поддерживают прямое внесение в базу данных, что предотвращает потерю данных при перезапуске. Устойчивость обеспечивается за счет возможности пользовательского расширения. Реализация интерфейса cloud.agileframework.task.TaskService позволяет пользователю определять методы хранения, такие как MySQL, Redis, Oracle и т.д. По умолчанию используется память, но это не поддерживает перезапуск.

  • Автоматическая загрузка при запуске При запуске приложения вместе с Spring автоматически загружаются данные периодических задач, без необходимости ручной настройки.

  • Динамическое изменение В процессе выполнения программы поддерживаются изменения через REST API или пользовательскую программу. Это позволяет динамически добавлять, изменять или удалять периодические задачи без необходимости перезапуска сервиса.

  • Периодические задачи Поддерживаются периодические задачи в виде выражений Spring Cron.

  • Задачи на конкретное время Поддерживаются задачи на конкретное время, представленные в виде метки времени. Например, задачи, которые должны выполняться только один раз.* Множество выражений Поддерживаются множественные выражения в одной задаче, разделённые английским символом точки с запятой. Это позволяет одновременно использовать несколько выражений для одной задачи, что упрощает создание и обслуживание задач.

  • Конфликты задач Конфликты задач могут возникнуть на уровне приложений и уровней выражений: конфликт уровня приложений указывает на ситуацию, когда одна и та же задача может быть запущена параллельно несколькими приложениями в распределённой системе или кластере. Agile-task предоставляет интерфейсы блокировки и разблокировки, позволяющие пользователям определять тип блокировки в зависимости от конкретной ситуации. Блокировка может быть реализована с помощью Redis, который предоставляется в составе компонента agile-cache.

    Конфликт уровня выражений указывает на ситуацию, когда одно и то же выражение может быть использовано для нескольких задач. Agile-task автоматически вычисляет точки пересечения этих выражений и гарантирует, что каждая точка будет выполнена только один раз.* Набор методов и сортировка Обычно задача связана с одним методом внутри одного приложения, но agile-task также поддерживает связывание нескольких методов с одной задачей. Эти методы можно также сортировать. Когда задача выполняется, она последовательно вызывает связанные методы в порядке, указанном пользователем.*

  • Определение сложных параметров задач Поддерживается определение сложных параметров для задач, содержимое которых сохраняется в виде JSON-строки. При выполнении задач эти параметры преобразуются в необходимый тип. Внутри реализованы два часто используемых параметра:* - $Task: информация о задаче. Когда параметр объявлен как этот идентификатор, процесс выполнения задачи вызывает метод планировщика с информацией о задаче в качестве аргумента.

    • $TaskCode: уникальный идентификатор задачи. Когда параметр объявлен как этот идентификатор, процесс выполнения задачи вызывает метод планировщика с уникальным идентификатором задачи в качестве аргумента.

Быстрое начало

Начало вашего первого проекта очень простое.

Шаг 1: Скачивание пакета

Вы можете скачать пакет с последней стабильной версией. Этот пакет загружается в центральный репозиторий Maven и может быть указан непосредственно в pom.xml.

Пример использования версии agile-task-2.1.0.M5.jar.

Шаг 2: Добавление зависимости Maven

<!-- Объявление центрального репозитория -->
<repositories>
    <repository>
        <id>cent</id>
        <url>https://repo1.maven.org/maven2/</url>
    </repository>
</repositories>

<!-- Объявление зависимости -->
<dependency>
    <groupId>cloud.agileframework</groupId>
   <artifactId>agile-task</artifactId>
    <version>2.1.0.M5</version>
</dependency>

Шаг 3: Настраиваемый запуск

Компоненты

// Ключ активации компонента, значение по умолчанию `true`, чтобы включить
agile.task.enable=true

// Ключ активации REST API компонента, значение по умолчанию `false`, чтобы отключить
agile.task.controller.enable=true

Динамическое добавление задач через REST```

// Например, создайте задачу с уникальным идентификатором 24, которая выполняется каждую секунду. Вызовите следующий URL с указанным ниже body параметром. URL: POST http://localhost:8080/task Параметры: { "code": "1", "name": "task", "cron": "0/1 * * * * ?", "sync": true, "enable": true, "targets": [ { "code": "public void cloud.agileframework.task.controller.TaskController.hello(cloud.agileframework.task.Task)", "argument": "$Task" } ] }


Журнал выполнения задач```
2020-08-12 10:31:20.466  INFO 16320 --- [  pool-1-定期任务-3] cloud.agileframework.task.TaskJob        : Задача:[24][Завершена]
2020-08-12 10:31:20.467  INFO 16320 --- [  pool-1-定期任务-3] cloud.agileframework.task.TaskJob        : Задача:[24][Следующее выполнение 2020-08-12 10:31:11]
2020-08-12 10:31:21.006  INFO 16320 --- [  pool-1-定期任务-3] cloud.agileframework.task.TaskJob        : Задача:[24][Начало выполнения]
2020-08-12 10:31:20.466  INFO 16320 --- [  pool-1-定期任务-3] cloud.agileframework.task.TaskJob        : Задача:[24][Завершена]
2020-08-12 10:31:20.467  INFO 16320 --- [  pool-1-定期任务-3] cloud.agileframework.task.TaskJob        : Задача:[24][Следующее выполнение 2020-08-12 10:31:12]
2020-08-12 10:31:21.006  INFO 16320 --- [  pool-1-定期任务-3] cloud.agileframework.task.TaskJob        : Задача:[24][Начало выполнения]
...
RESTful методы для динамического запуска и остановки
// Например, используя только что созданную задачу №24
Адрес для остановки: POST http://localhost:8080/task/24/false
Адрес для запуска: POST http://localhost:8080/task/24/true
RESTful методы для запроса данных
// Например, используя только что созданную задачу №24
Адрес: GET http://localhost:8080/task/24
// Запрос всех задач
Адрес: GET http://localhost:8080/task
```##### RESTful методы для обновления данных

// Например, используя только что созданную задачу №24, изменяем период выполнения задачи на несколько выражений, а параметры заменяем произвольной строкой Адрес: POST http://localhost:8080/task Параметры: { "code": "1", "name": "task", "cron": "0/1 * * * * ?", "sync": true, "enable": true, "targets": [ { "code": "public void cloud.agileframework.task.controller.TaskController.hello(java.lang.String)", "argument": "Это входящий параметр, он также может быть JSON-структурой" } ] }


#### Продвинутый уровень 1: Настройка способа хранения данных

##### Настраиваемая структура данных задачи

> Структура задачи: `cloud.agileframework.task.Task`
> По умолчанию: `cloud.agileframework.task.controller.CustomTask`

> Интерфейс для хранения задач: `cloud.aglieframework.task.TaskService`
> По умолчанию: `cloud.aglieframework.task.TaskServiceImpl`

##### Описание структуры данных

**Определение задач (`cloud.aglieframework.task.Task`)**

```java
public interface Task {
    /**
     * Получает уникальный идентификатор задачи
     *
     * @return Уникальный идентификатор
     */
    Long getCode();

    /**
     * Получает имя задачи
     *
     * @return Имя задачи
     */
    String getName();

    /**
     * Получает cron-выражение
     *
     * @return Выражение для планировщика задач
     */
    String getCron();

    /**
     * Возвращает значение синхронизации в кластере
     *
     * @return Булево значение
     */
    Boolean getSync();

    /**
     * Возвращает значение доступности задачи
     *
     * @return Булево значение
     */
    Boolean getEnable();
}
``````markdown
    /**
     * Получает уникальный идентификатор цели задачи
     *
     * @return Уникальный идентификатор
     */
    Method getMethod();

    /**
     * Получает входные данные задачи
     *
     * @return Входные данные
     */
    String getArgument();
}

Комментарии ( 0 )

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

Введение

**Компонент задачи диспетчеризации** * **Постоянное хранение задач.** Данные о задачах сохраняются непосредственно в базе данных, что предотвращает потерю данных при перезапуске. Постоянное хранение также поддерживает настраиваемые расширения. Реализуя интерфейс cloud.agileframework.task.TaskService, можно настроить способ постоянного хранения,... Развернуть Свернуть
Apache-2.0
Отмена

Обновления

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

Участники

все

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

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