Skip to content
广告❤️成为赞助商

定时调度

定时调度,主要用于定时任务实现流程提醒超时处理类,可以查看源码 flowlong-spring-boot-example 模块相关配置。

  • 业务需实现抽象类 com.aizuda.bpm.engine.FlowLongScheduler 当前内置单机实例处理。
  • 分布式框架多实例部署,请重写该类采用分布式调度实现。

调度流程图

定时调度SpringBoot实现

继承抽象类 FlowLongScheduler 实现 SchedulingConfigurer 接口。

java
// 该类为 `SpringBoot` 实现本地实时调度
public class BpmScheduler extends FlowLongScheduler implements SchedulingConfigurer {

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.addTriggerTask(this::remind, triggerContext ->
                new CronTrigger(getRemindParam().getCron()).nextExecution(triggerContext));
    }
}

配置参数

设置抽象类 FlowLongScheduler 属性 remindParam 提醒参数。未配置定时任务提醒参数,默认cron5秒钟执行一次

java
public class RemindParam {
    /**
     * 提醒时间 cron 表达式
     */
    private String cron;
    /**
     * 工作日设置,格式为 1,2,3...7,表示周一至周日
     */
    private String weeks;
    /**
     * 工作时间设置,格式为 8:00-18:00
     */
    private String workTime;

}

调度任务锁

  • 避免重复调度执行任务,导致多次执行通知等业务逻辑。

默认注入 ReentrantLock 本地防重入锁,如果是分布式部署可以使用 redis 等实现 JobLock 接口支持分布式锁。

java
public interface JobLock {

    /**
     * 进入锁(获取锁),立即返回,不会阻塞等待锁
     *
     * @return true 获取到锁 false 未获取到锁
     */
    boolean tryLock();

    /**
     * 解除锁
     */
    void unlock();
}

更适合中国人的工作流引擎