SpringBoot定时任务+Quartz 动态调度

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值