Solon

solon.schedule

<dependency>
    <groupId>org.noear</groupId>
    <artifactId>solon.schedule</artifactId>
</dependency>

1、描述

调度扩展插件。这个框架与 Spring schedule 能力差不多,主要为从 Spring 迁移过来的同学提供便利。没有外部框架的依赖,且支持毫秒级的调度。

2、使用示例

// 启用 Scheduled 注解的任务
@EnableScheduling
public class JobApp {
    public static void main(String[] args) {
        Solon.start(JobApp.class, args);
    }
}

// 基于 Runnable 接口的模式
@Scheduled(fixedRate = 1000 * 3)
public class Job1 implements Runnable {
    @Override
    public void run() {
        System.out.println("我是 Job1 (3s)");
    }
}

// 基于 Method 的模式
@Component
public class JobBean {
    @Scheduled(fixedRate = 1000 * 3)
    public void job11(){
        System.out.println("我是 job11 (3s)");
    }

    @Scheduled(cron = "0/10 * * * * ? *")
    public void job12(){
        System.out.println("我是 job12 (0/10 * * * * ? *)");
    }

    //cron 表达式,支持时区的模式 
    @Scheduled(cron = "0/10 * * * * ? * +05")
    public void job13(){
        System.out.println("我是 job13 (0/10 * * * * ? *)");
    }

    //时区独立表示的模式
    @Scheduled(cron = "0/10 * * * * ? *", zone = "Asia/Shanghai")
    public void job14(){
        System.out.println("我是 job14 (0/10 * * * * ? *)");
    }
}

3、@Scheduled 属性说明

属性说明
name任务名称
cronCron 表达式:支持7位(秒,分,时,日期ofM,月,星期ofW,年)
zone时区:+08 或 CET 或 Asia/Shanghai
fixedRate固定间隔毫秒数(大于 0 时,cron 会失效)
fixedDelay固定延时毫秒数 (fixedRate 大于 0 时,才有效)
concurrent可并行执行(即,上个调度未完成即可开始新的计划调度)

4、Cron 支持的增强表达式

支持7位(秒,分,时,日期ofM,月,星期ofW,年)

  • 例:0 0/1 * * * ? *
  • 带时区,例:0 0/1 * * * ? * +050 0/1 * * * ? * -05

5、动态修改调度表达式接口

//重置接口
JobManager.reset("job1", "0/1 * * * * * ?");

//使用示例
@Controller
public class DemoApp{
    public static void main(String[] args){
        Solon.start(DemoApp.class, args);
    }
    
    @Mapping("/job/reset")
    public void reset(String name, String cronx){
        JobManager.reset(name, cronx);
    }
}