pom.xml配置文件内添加,如下配置:

    相关配置

    内存方式

    ApiBoot Quartz在使用内存方式存储任务时,不需要做配置调整。

    需要在application.yml配置文件内修改api.boot.quartz.job-store-type参数,如下所示:

    1. api:
    2. boot:
    3. quartz:
    4. # Jdbc方式
    5. job-store-type: jdbc

    Quartz所需表结构

    Quartz的数据库方式内部通过DataSource获取数据库连接对象来进行操作数据,所操作数据表的表结构是固定的,ApiBootQuartz所支持的所有表结构都进行了整理,访问Quartz支持数据库建表语句列表查看,复制执行对应数据库语句即可。

    创建任务类

    我们只需要让新建类集成QuartzJobBean就可以完成创建一个任务类,如下简单示例:

    1. /**
    2. * 任务定义示例
    3. * 与Quartz使用方法一致,ApiBoot只是在原生基础上进行扩展,不影响原生使用
    4. * <p>
    5. * 继承QuartzJobBean抽象类后会在项目启动时会自动加入Spring IOC
    6. *
    7. * @author:恒宇少年 - 于起宇
    8. * <p>
    9. * DateTime:2019-03-28 17:26
    10. * WebSite:http://www.jianshu.com/u/092df3f77bca
    11. * Gitee:https://gitee.com/hengboy
    12. * GitHub:https://github.com/hengboy
    13. */
    14. public class DemoJob extends QuartzJobBean {
    15. /**
    16. * logger instance
    17. */
    18. static Logger logger = LoggerFactory.getLogger(DemoJob.class);
    19.  
    20. @Override
    21. protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
    22. logger.info("定时任务Job Key : {}", context.getJobDetail().getKey());
    23. logger.info("定时任务执行时所携带的参数:{}", JSON.toJSONString(context.getJobDetail().getJobDataMap()));
    24. //...处理逻辑
    25. }
    26. }

    任务参数

    在任务执行时传递参数是必须的,ApiBoot Quartz提供了比较方便的传递方式,不过最终Quartz会把传递的值都会转换为String类型数据。

    任务Key默认值

    自定义任务开始时间

    任务开始时间可以通过startAtTime方法进行设置,在不设置的情况下,任务创建完成后会立刻执行。

    Cron 表达式任务

    创建Cron类型任务如下所示:

    Cron 表达式任务由ApiBootCronJobWrapper类进行构建。

    上面的DemoJob任务类将会每隔5秒执行一次。

    Loop 重复任务

    Loop循环任务,当在不传递重复执行次数时,不进行重复执行,仅仅执行一次,如下所示:

    1. String jobKey = apiBootQuartzService.newJob(
    2. ApiBootLoopJobWrapper.Context()
    3. // 参数
    4. .param(
    5. ApiBootJobParamWrapper.wrapper()
    6. .put("userName", "恒宇少年")
    7. .put("userAge", 24)
    8. )
    9. // 每次循环的间隔时间,单位:毫秒
    10. .loopIntervalTime(2000)
    11. // 循环次数
    12. .repeatTimes(5)
    13. // 开始时间,10秒后执行
    14. // 任务类
    15. .jobClass(DemoJob.class)
    16. .wrapper()
    17. );

    Loop 任务由ApiBootLoopJobWrapper类进行构建。

    上面的定时任务将会重复执行5次,连上自身执行的一次也就是会执行6次,每次的间隔时间为2秒,在任务创建10秒后进行执行。

    Once 一次性任务

    1. Map paramMap = new HashMap(1);
    2. paramMap.put("paramKey", "参数值");
    3.  
    4. String jobKey = apiBootQuartzService.newJob(
    5. ApiBootOnceJobWrapper.Context()
    6. .jobClass(DemoJob.class)
    7. // 参数
    8. .param(
    9. ApiBootJobParamWrapper.wrapper()
    10. .put("mapJson", JSON.toJSONString(paramMap))
    11. )
    12. // 开始时间,2秒后执行
    13. .startAtTime(new Date(System.currentTimeMillis() + 2000))
    14. .wrapper()
    15. );

    Once 任务由ApiBootOnceJobWrapper类进行构建。

    在参数传递时可以是对象、集合,不过需要进行转换成字符串才可以进行使用。

    暂停任务执行

    任务在执行过程中可以进行暂停操作,通过ApiBoot Quartz提供的pauseJob方法就可以很简单的实现,当然暂停时需要传递Job KeyJob Key可以从创建任务方法返回值获得。

    暂停任务如下所示:

    任务执行完暂停后,如果想要恢复可以使用如下方式:

    1. // 恢复指定Job Key的任务执行
    2. apiBootQuartzService.resumeJob(jobKey);
    3. // 恢复多个暂停任务
    4. apiBootQuartzService.resumeJobs(jobKey,jobKey,jobKey);

    修改Cron表达式

    修改表达式的场景如下:

    • 已创建 & 未执行
    • 已创建 & 已执行
      修改方法如下所示:
    1. // 修改执行Job Key任务的Cron表达式
    2. apiBootQuartzService.updateJobCron(jobKey, "0/5 * * * * ?");

    删除任务

    想要手动释放任务时可以使用如下方式:

    • 暂停触发器
    • 移除触发器
    • 删除任务