1、分部解释
2、完整代码
3、SpringBoot定时任务+Quartz
1、动态定时任务:
- 动态定时任务,即定时任务的动态调度,可根据需求自由的进行任务的生成、暂停、恢复、删除和更新操作。
- Quartz本身没有提供动态调度的功能,需要自己根据相关的API开发。
2、动态定时任务使用场景:
- 订单成功后自动发短信通知
- 每日推送的功能引发用户不满,不再定时推送
- 每日下班前30分钟发送工作报表,遇节假日暂停发送
- …
3、Scheduler调度器常用API
4、实现动态调度的定时任务
注释:
JobBean:封装,任务调度的参数,不在使用默认的调度方式。
代码演示:
1、JobBean 类:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class JobBean {
//任务名字
private String jobName;
//任务类,(自己任务,实现类的全类名) --->任务类.class.getName()
private String jobClass;
//cron表达式
private String cronExpression;
}
2、创建一个工具类:
2.1、创建定时任务:
//创建任务
public static void createJob(Scheduler scheduler, JobBean jobBean) {
//通过类的名字获取类
Class<? extends Job> jobClass = null;
CronTrigger trigger =null;
JobDetail jobDetail =null;
try {
jobClass = (Class<? extends Job>) Class.forName(jobBean.getJobClass());
jobDetail = JobBuilder.newJob(jobClass)
.storeDurably()
//唯一标识
.withIdentity(jobBean.getJobName())
.build();
//创建触发器
trigger = TriggerBuilder.newTrigger()
.forJob(jobDetail)
//唯一标识和上面的JobDetail是配对的。当然写别的名称也是可以的,就是一个标识
.withIdentity(jobBean.getJobName())
//这个表达式可以写到yml 中进行引用,这样以后更改直接改配置文件即可。
//每两秒钟执行一次
.withSchedule(CronScheduleBuilder.cronSchedule(jobBean.getCronExpression()))
.build();
//需要 JobDetail var1, Trigger var2 这两个参数
scheduler.scheduleJob(jobDetail, trigger);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}catch (SchedulerException e) {
throw new RuntimeException(e);
}
}
2.2、暂停任务:
//暂停任务
public static void pauseJob(Scheduler scheduler, String jobName) {
try {
scheduler.pauseJob(JobKey.jobKey(jobName));
} catch (SchedulerException e) {
throw new RuntimeException(e);
}
}
2.3、恢复任务:
//恢复任务
public static void resumeJob(Scheduler scheduler, String jobName