Plan.java 1.13 KB
package com.yanzuoguang.redis;

/**
 * 每秒定时任务
 * <p>
 * 1. 当任务实现 <PlanName> 接口时,将会采用该接口所配置的名称,否则采用任务类全路径,
 * 2. 当任务实现 <PlanGlobal> 接口时,将会采用该接口所配置的运行级别,否则采用application级别
 * - application 级别:采用 bootstrap.yml 文件中 spring.application.name 作为运行隔离级别,不同的application互相之间没有影响
 * - global 级别: 不同的application互相之间只有唯一一个,并且只有最后一个启动的程序可以运行
 * 3. 当任务实现 <PlanStart> 接口时,将会采用该接口来确定打开程序是否运行,默认为true
 *
 * @author 颜佐光
 */
public interface Plan {

    /**
     * 执行的任务函数
     */
    void plan();

    /**
     * 下次执行时间,从上次开始时间计算,即 plan.time 开始计算.
     * plan.time + @return < 当前毫秒则开始运行
     *
     * @param plan       任务信息
     * @param isConsumer 是否运行任务(消费者)
     * @return 是否执行
     */
    long getNextSecond(PlanInfo<?> plan, boolean isConsumer);
}