springboot 自定义定时任务 QuartzJobBean

1.引入pom文件

 <!-- quartz-定时任务jar包 -->
 <dependency>
    <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-quartz</artifactId>
 </dependency>

2.实体创建 其中 jobClass 为业务类 如 com.test.job.QuartzTask

@Data
public class QuartzBean {
    private String id;
    /** 任务运行时间表达式 */
    private String cron;
    /** 任务名称 */
    private String jobName;
    /** 任务执行类 (业务类) */
    private String jobClass;
    /** 任务状态 启动还是暂停*/
    private Integer status;
}

3.编写工具类

/**
* 创建定时任务 定时任务创建之后默认启动状态
 * @param scheduler   调度器
 * @param quartzBean  定时任务信息类
 * @throws Exception
 */
public static void createScheduleJob(Scheduler scheduler, QuartzBean quartzBean){
    try {
        //获取到定时任务的执行类  必须是类的绝对路径名称
        //定时任务类需要是job类的具体实现 QuartzJobBean是job的抽象类。
        Class<? extends Job> jobClass = (Class<? extends Job>) Class.forName(quartzBean.getJobClass());
        // 构建定时任务信息
        JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(quartzBean.getJobName()).build();
        // 设置定时任务执行方式
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(quartzBean.getCron()).withMisfireHandlingInstructionDoNothing();
        // 构建触发器trigger
        CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(quartzBean.getJobName()).withSchedule(scheduleBuilder).build();
        scheduler.scheduleJob(jobDetail, trigger);
    } catch (ClassNotFoundException e) {
        System.out.println("定时任务类路径出错:请输入类的绝对路径");
    } catch (SchedulerException e) {
        System.out.println("创建定时任务出错:"+e.getMessage());
    }
}

/**
 * 根据任务名称暂停定时任务
 * @param scheduler  调度器
 * @param jobName    定时任务名称 可为业务ID
 * @throws SchedulerException
 */
public static void pauseScheduleJob(Scheduler scheduler, String jobName){
    JobKey jobKey = JobKey.jobKey(jobName);
    try {
        scheduler.pauseJob(jobKey);
    } catch (SchedulerException e) {
        System.out.println("暂停定时任务出错:"+e.getMessage());
    }
}

/**
* 根据任务名称恢复定时任务
 * @param scheduler  调度器
 * @param jobName    定时任务名称  可为业务ID
 * @throws SchedulerException
 */
public static void resumeScheduleJob(Scheduler scheduler, String jobName) {
    JobKey jobKey = JobKey.jobKey(jobName);
    try {
        scheduler.resumeJob(jobKey);
    } catch (SchedulerException e) {
        System.out.println("启动定时任务出错:"+e.getMessage());
    }
}

/**
 * 根据任务名称立即运行一次定时任务
 * @param scheduler     调度器
 * @param jobName       定时任务名称  可为业务ID
 * @throws SchedulerException
 */
public static void runOnce(Scheduler scheduler, String jobName){
    JobKey jobKey = JobKey.jobKey(jobName);
    try {
        scheduler.triggerJob(jobKey);
    } catch (SchedulerException e) {
        System.out.println("运行定时任务出错:"+e.getMessage());
    }
}

/**
 * 更新定时任务
 * @param scheduler   调度器
 * @param quartzBean  定时任务信息类
 * @throws SchedulerException
 */
public static void updateScheduleJob(Scheduler scheduler, QuartzBean quartzBean)  {
    try {
        //获取到对应任务的触发器
        TriggerKey triggerKey = TriggerKey.triggerKey(quartzBean.getJobName());
        //设置定时任务执行方式
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(quartzBean.getCron());
        //重新构建任务的触发器trigger
        CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
        trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
        //重置对应的job
        scheduler.rescheduleJob(triggerKey, trigger);
    } catch (SchedulerException e) {
        System.out.println("更新定时任务出错:"+e.getMessage());
    }
}

/**
 * 根据定时任务名称从调度器当中删除定时任务
 * @param scheduler 调度器
 * @param jobName   定时任务名称  可为业务ID
 * @throws SchedulerException
 */
public static void deleteScheduleJob(Scheduler scheduler, String jobName) {
    JobKey jobKey = JobKey.jobKey(jobName);
    try {
        scheduler.deleteJob(jobKey);
    } catch (SchedulerException e) {
        System.out.println("删除定时任务出错:"+e.getMessage());
    }
}

4.创建业务类,来处理定时任务逻辑

@Component
public class QuartzTask extends QuartzJobBean {

	 @Override
	 protected void executeInternal(JobExecutionContext jobExecutionContext) {
	  	JobKey jobKey = jobExecutionContext.getJobDetail().getKey();
        logger.info("任务准备执行, 任务ID:{}", jobKey.getName());
  	 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值