Skip to content

hdfg159/scheduler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Scheduler - 轻量级任务调度工具

简介

轻量级任务调度工具

优点

  • 简易使用:简易创建方式和链式调用 API

  • 无依赖:不依赖其他任何组件

  • 动态:随时取消任务

  • 事件触发:目前支持按照每日时间点调度、周几时间点调度、简单调度(次数、频率、时间范围控制)、支持同一任务顺序执行和非顺序执行

  • 拓展性:可以继承 AbstractTrigger 默认继承类 或者 实现 Trigger 接口 实现自己的自定义触发器

  • 调度线程:支持自定义的线程池实现,按照任务执行消耗时间自动调度到不同线程池

  • 异常处理:支持针对每个定时器执行错误异常捕获后的自定义处理

  • 错误重试:支持针对每个定时任务出错后设置反复重试次数

应用实例

创建任务

创建从现在开始,1秒触发1次,一共执行10次的任务

Triggers.times("自定义触发器名称", 10, 1, ChronoUnit.SECONDS, LocalDateTime.now(), 
        trigger -> {
            // 业务处理
            System.out.println("hello world");
        })
        .schedule();

更多创建方式可以查看 Triggers 工厂方法

取消任务

通过 Trigger 的 scheduleCancel() 方法 直接取消

Trigger trigger = ... ;
trigger.scheduleCancel();

通过 ScheduleManagercancel(String triggerName) 根据触发器自定义名称进行取消

SchedulerManager.INSTANCE.cancel("自定义触发器名称");

定制任务异常处理

Triggers.times("自定义触发器名称", 10, 1, ChronoUnit.SECONDS, LocalDateTime.now(),
        trigger -> {
            // 耗时业务处理
            System.out.println("hello world");
        })
        .afterExceptionCaught((trigger, throwable) -> {
            // 异常处理
        })
        .schedule();

同一任务顺序执行

默认创建任务sequence属性为false(即任务开始时马上放入下一个执行时间任务)

Triggers.times("自定义触发器名称", 5, 1, ChronoUnit.SECONDS, LocalDateTime.now(),
        trigger -> {
            // 业务处理
            System.out.println("hello world");
        })
        .sequence(true)
        .schedule();

任务出错重试

Triggers.times("自定义触发器名称", times, 1, ChronoUnit.SECONDS, LocalDateTime.now(),
        trigger -> {
            throw new RuntimeException("出错了啊");
        })
        .retry(3)
        .schedule();

License

Scheduler is under the Apache License, Version 2.0 - see the LICENSE file for details.