定时工作使用指南

如果你想做定时工作,有高可用方面的需要,或者仅仅想入门快,上手简略,那么选用它准没错。

定时工作模块是对Quartz框架进一步封装,应用更加简洁。

1、引入依赖
<dependency>    <groupId>xin.altitude.cms</groupId>    <artifactId>ucode-cms-quartz</artifactId>    <version>1.5.4.1</version></dependency>
2、疾速上手

实现org.quartz.Job接口;应用注解CronExp增加工作的调度策略;应用注解Component将工作注入容器中。

启动我的项目,定时工作便处于监听与运行中。

@Component@DisallowConcurrentExecution@CronExp(cron = "0/5 * * * * ?")public class DemoJob implements Job {    @Override    public void execute(JobExecutionContext context) {        System.out.println("工作1:" + LocalDateTime.now());    }}

3、手动触发定时工作

定时工作除了以既有频率周期性运行外,还有通过接口手动被触发的能力。

调用如下接口,可手动触发工作ID编号为jobId的工作。

http://localhost:8080/cms-api/quartz/job/{jobId}

如果有手动触发定时工作的需要,则须要工作ID惟一并已知,因而须要在编写定时工作时手动指定。

@CronExp(id = 1, cron = "0/5 * * * * ?")

通过注解CronExp的id属性可指定工作ID,不显示指定则应用随机ID,不满足已知的条件,因而无奈手动触发。

4、带参数工作

只管大多数工作不须要注入参数,但仍有大量的场景须要向定时工作注入参数。

public void execute(JobExecutionContext context) {    /* 如果在调用工作时传入了参数,则可能从Map中获取 */    Map<String, Object> dataMap = context.getMergedJobDataMap();    /* 比方从Map中获取一个键值对,一般来说参数均为根本数据类型 */    Object key = dataMap.get("key");    System.out.println("工作2:" + LocalDateTime.now() + ": " + key);}

在编写定时工作时,可从JobExecutionContext对象中解析一个Map,从而实现参数的注入。

http://localhost:8080/cms-api/quartz/job/1?key=a

上述http调用的含意是手动触发工作ID为【1】的工作,并且向其传递参数为【key】值为【a】的参数。

5、工作并发

本框架不反对工作并发,换句话说并发对定时工作不利,因而须要手动禁止。

须要留神的是Quartz的并发是指当工作执行耗时超过任务调度周期时,上一个工作未执行完,新工作是否执行。

一般来说须要显示禁止并发,在工作类上增加注解DisallowConcurrentExecution即可禁止工作并发。

6、长久化

如果定时工作有高可用的需要,那么须要对工作进行长久化。定时工作数据长久化到数据库中后,反对应用程序多开。定时工作长久化多节点部署后,集群中单节点故障不影响定时工作的执行。

定时工作长久化,仅需批改yml文件配置即可达到目标,无需批改代码。一般而言应用Mysql做长久化的容器。

spring:  quartz:    properties:      org.quartz.jobStore.isClustered: true      org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX      org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate      org.quartz.jobStore.dataSource: qzDS      org.quartz.dataSource.qzDS.driver: com.mysql.cj.jdbc.Driver      org.quartz.dataSource.qzDS.URL: jdbc:mysql://localhost:3306/quartz-demo      org.quartz.dataSource.qzDS.user: root      org.quartz.dataSource.qzDS.password: 123456

除了批改主机、端口、数据库名、用户名、明码五个参数外,其余参数应用默认值即可。

配置完数据库连贯后,应用SQL脚本,留神初始化数据库

如有疑难,可通过微信dream4s与作者分割。源码在GitHub,视频解说在B站,本文珍藏在博客天地。