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

OSCHINA-MIRROR/jonzhang-3-a-task

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

ATask

Простой многоцелевой асинхронный фреймворк для выполнения задач.

Основные характеристики

  1. Простота в использовании, цепные вызовы.
  2. Различные типы задач: задачи с обратным вызовом, задачи с получением результата, группы задач.
  3. Возможность настройки параметров задачи, таких как тип, время ожидания и т. д.
  4. Гибкость: возможность блокировать текущий поток или установить метод обратного вызова.
  5. Получение информации о состоянии выполняемых задач в реальном времени и обработка выполненных задач по своему усмотрению.
  6. Мониторинг выполнения задач в режиме реального времени.

Использование

Импорт

Maven

<dependency>
    <groupId>com.github.jonzhang3</groupId>
    <artifactId>aTask</artifactId>
    <version>1.1.0</version>
</dependency>

Пример

Создание движка для выполнения задач (пул потоков)
TaskEngine engine = new TaskEngine.Builder()
    .corePoolSize(3)// Устанавливаем размер основного пула потоков, по умолчанию — количество ядер процессора
    .maxPoolSize(100)// Устанавливаем максимальный размер пула потоков, по умолчанию — Integer.MAX_VALUE
    .keepAliveSeconds(1000)// Устанавливаем максимальное время простоя потока, по умолчанию — 60 секунд
    // Устанавливаем ёмкость очереди задач, по умолчанию — Integer.MAX_VALUE. Если значение отрицательное, используется SynchronousQueue, иначе — LinkedBlockingQueue
    .queueCapacity(20)
    // Устанавливаем стратегию отказа пула потоков
    .rejectedExecutionHandler(RejectedExecutionHandler)
    .completedTaskHandler(handler)// Устанавливаем обработчик для выполненных задач
    .build();
// Можно использовать getRunningTasks() для получения текущих выполняемых задач
1. Использование задач с обратными вызовами для обработки результатов
Task task = engine.buildTask(ctx -> {
        ctx.onProgress(100);// Устанавливаем значение прогресса, вызывается функция обратного вызова прогресса
        ctx.onSuccess("1", "2", "3");// Устанавливаем успешное выполнение задачи, вызывается функция обратного вызова результата
        ctx.onError(Exception);// Устанавливаем неудачное выполнение задачи, вызывается функция обратного вызова результата
        // Если onSuccess и onError вызваны, то сначала будет вызван onSuccess
    })
    .type("type")// Устанавливаем тип задачи
    .progress(progress -> {})// Устанавливаем функцию обратного вызова прогресса задачи
    // Устанавливаем функции обратного вызова для результата задачи. Если задача выполнена успешно, error будет null; если задача не выполнена, error не будет null
    .end((ctx, error) -> {
        if(error != null) {// Успешное выполнение
            ctx.getResult();// Получаем данные, установленные onSuccess
        } else {// Неудачное выполнение
            log.error(error);// Выводим ошибку
        }
    })
    .build();
engine.go(task);// Наконец вызываем go метода TaskEngine для выполнения задачи
task.await(); // Этот метод блокирует текущий поток. Если нужно дождаться завершения задачи перед продолжением, используйте этот метод
2. Задачи с возвращаемым результатом
ResultTask<String> resultTask = engine.buildResultTask(ctx -> {
        ctx.onProgress(200);
        return "success";// Возвращаем результат
    })
    .type("type")
    .progress(i -> {})
    .build();
engine.go(resultTask);
// Получаем возвращаемый результат
// Этот метод блокирует текущий поток
String result = resultTask.get();
3. Группы задач
TaskGroup group = engine.prepareGroup();// Создаём группу задач
// Добавляем и выполняем задачу
group.go(group.buildItem(ctx -> {
    ctx.group().incrementCounter();// Увеличиваем счётчик (потокобезопасный)
    ctx.group().addData("data");// Устанавливаем данные для последующего использования
}).build());
group.await();// Ждём завершения всех задач в группе
group.getCounter();// Получаем результат счётчика
Data data = group.getData();// Получаем данные из задачи в группе (потокобезопасные)
4. Мониторинг страницы
Первый способ:

Зарегистрировать класс ServletRegistrationBean

@Bean
public ServletRegistrationBean<StatViewServlet> druidStatViewServlet() {
    TaskEngine engine = new TaskEngine.Builder()
                    .build();
    engine.prepareGroup("test");
    // Установить TaskEngine
    TaskStatService.setTaskEngine(engine);
    // Зарегистрировать StatViewServlet и задать путь
    ServletRegistrationBean<StatViewServlet> registrationBean =
            new ServletRegistrationBean<>(new StatViewServlet(), "/atask/*");
    registrationBean.addInitParameter("username", "root");// Установить имя пользователя для входа
    registrationBean.addInitParameter("password", "1234");// Установить пароль для входа
    return registrationBean;
}
Второй способ:

Сначала создать TaskEngine, затем установить его в TaskStatService

    // Также можно использовать другие способы
    static TaskEngine engine;
    static {
        engine = new TaskEngine.Builder()
                .build();
        TaskStatService.setTaskEngine(engine);
    }

Затем создать класс Servlet и добавить аннотацию @WebServlet

@WebServlet(
    urlPatterns = "/atask/*",
    initParams = {
            @WebInitParam(name = "username", value = "admin"),
            @WebInitParam(name = "password", value = "123456"),
    }
)
public class ATaskStatServlet extends StatViewServlet {
    
}

Не забудьте добавить аннотацию @ServletComponentScan в класс запуска

@SpringBootApplication
@ServletComponentScan
public class DemoApplication {
}

Страница мониторинга: Мониторинг страницы.

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

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

Введение

Простой универсальный фреймворк для выполнения асинхронных задач. Расширить Свернуть
MIT
Отмена

Обновления (1)

все

Участники

все

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

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