美文网首页
使用 Cron4j 表达式 在 Solon 里开发定时任务

使用 Cron4j 表达式 在 Solon 里开发定时任务

作者: 草编椅 | 来源:发表于2021-07-18 08:48 被阅读0次

    cron4j 是一个轻量级的Java任务调度工具。cron4j-solon-plugin 是 solon 对 cron4j 的适配插件

    添加 maven 引用

    <dependency>
        <groupId>org.noear</groupId>
        <artifactId>cron4j-solon-plugin</artifactId>
        <version>1.5.11</version>
    </dependency>
    

    cron4j的cron表达式最多只允许5个部分,每个部分用空格分隔开,从左至右分别表示“分”、“时”、“天”、“月”、“周”,具体规则如下:

    分:取值从 0 到 59

    时:取值从 0 到 23

    天:取值从 1 到 31,字母 L 可用于表示月的最后一天

    月:取值从 1 到 12,可以用别名表示:jan、feb、mar、apr、may、jun、jul、aug、sep、oct、nov、dec

    周:取值从 0 到 6,0表示周日,6表示周六,可以用别名表示:sun、mon、tue、wed、thu、fri、sat

    以上5个部分的分、时、天、月、周又分别支持如下字符:

    数字 n :表示一个具体的时间点,例如 5 * * * * 表示 5 分这个时间点时执行

    逗号 , :表示指定多个数值,例如 3,5 * * * * 表示 3 和 5 分这两个时间点执行

    减号 - :表示范围,例如 1-3 * * * * 表示 1 分、2 分再到 3 分这三个时间点执行

    星号 * :表示每一个时间点,例如 * * * * * 表示每分钟执行

    除号 / :表示指定一个值的增加幅度。例如 */5表示每隔5分钟执行一次(序列:0:00, 0:05, 0:10, 0:15 等等)

    常见错误:

    cron4j在表达式中使用除号指定增加幅度时与linux稍有不同。例如在linux中表达式 10/3 * * * * 的含义是从第10分钟开始,每隔三分钟调度一次,而在cron4j中需要使用 10-59/3 * * * * 来表达。

    cron4j-solon-plugin 插件的 @Cron5x 注解

    Cron5x 表示,支持5段的 Cron 表达式;同时支持快速配置:s m h d,例:10s (每隔10秒跑一次)

    新建代码文件,试一试

    • java/jobapp/JobApp
    • java/jobapp/controller/Cron4jRun1
    • java/jobapp/controller/Cron4jRun2
    • java/jobapp/controller/Cron4jTask
    • reources/application.properties

    代码

    • JobApp 代码

    JobApp.java

    //
    // 启用 Cron4j 主解的任务
    //
    @EnableCron4j
    public class JobApp {
        public static void main(String[] args) {
            Solon.start(JobApp.class, args);
        }
    }
    
    
    • 使用快捷配置模式:n + ms,s,m,h,d ;使用Runnable接口开发

    Cron4jRun1.java

    @Cron4j(cron5x = "2s", name = "job1")
    public class Cron4jRun1 implements Runnable {
        @Override
        public void run() {
            System.out.println("我是 Cron4jRun1 (2s)");
        }
    }
    
    • 使用cron5x配置模式:* * * * * ;使用Runnable接口开发

    Cron4jRun2.java

    @Cron4j(cron5x = "*/1 * * * *")
    public class Cron4jRun2 implements Runnable {
        @Override
        public void run() {
            System.out.println("我是 Cron4jRun2 (*/1 * * * *)");
        }
    }
    
    
    • 使用cron5x配置模式:* * * * * ;使用Task接口开发

    Cron4jTask.java

    @Cron4j(cron5x = "*/1 * * * *")
    public class Cron4jTask extends Task {
        @Override
        public void execute(TaskExecutionContext context) throws RuntimeException 
            System.out.println("我是 Cron4jTask (*/1 * * * *)");
        }
    }
    

    通过配置,控制有name的任务

    application.properties

    # solon.cron4j.{job name}
    #
    solon.cron4j.job1.cron5x=10s  #重新定义时间表达式
    solon.cron4j.job1.enable=true #用任务进行启停控制
    

    运行输出

    solon.plugin:: Start loading
    file:/Users/xieyuejia/WORK/work_github/solon_demo/demo10.solon_schedule/target/classes/application.properties
    jar:file:/Users/xieyuejia/.m2/repository/org/noear/cron4j-solon-plugin/1.2.20/cron4j-solon-plugin-1.2.20.jar!/solonplugin/solon.extend.cron4j.properties
    我是定时任务: Cron4jRun1(200ms))
    solon.plugin:: End loading @129ms
    我是定时任务: Cron4jRun1(200ms)
    

    DEMO源码

    源码:demo10.solon_schedule

    相关文章

      网友评论

          本文标题:使用 Cron4j 表达式 在 Solon 里开发定时任务

          本文链接:https://www.haomeiwen.com/subject/romopltx.html