Springboot整合quartz实现动态管理定时任务

目前对于定时功能的需求越来越多,这篇文章描述了如何动态实现定时任务,可以将所有定时任务的属性存储到数据库中,后端编写查询所有定时任务列表(包含无参数限制查询和有参数限制模糊查询),前端调用查询接口可以将所有定时任务显示出来,前端也可以选中某个定时任务,调用后端开启定时任务、关闭定时任务、恢复定时任务、删除定时任务以及修改定时任务刷新周期等接口完成对定时任务的动态处理。


1.创建数据库以及创建定时任务表


2.创建对应的实体类

package com.mhc.common.scheduler;

/**
 * job基本信息
 * Description:
 * User: mhc
 * Date: 2019-06-25
 * Time: 20:46
 */
public class ScheduleJob {
    /** 任务id */
    private String jobId;
    /** 任务名称 */
    private String jobName;
    /** 任务分组 */
    private String jobGroup = "default-group";
    /** 任务状态 0禁用 1启用 2删除*/
    private String jobStatus = JobStatus.RUNNING;
    /** 任务运行时间表达式 */
    private String cronExpression;
    /** 任务描述 */
    private String desc;
    /**任务全类名**/
    private String beanClass;

    public ScheduleJob(){}

    public ScheduleJob(String jobId, String jobName, String jobGroup, String jobStatus, String cronExpression, String desc) {
        this.jobId = jobId;
        this.jobName = jobName;
        this.jobGroup = jobGroup;
        this.jobStatus = jobStatus;
        this.cronExpression = cronExpression;
        this.desc = desc;
    }

    public ScheduleJob(String jobId, String jobName, String cronExpression) {
        this.jobId = jobId;
        this.jobName = jobName;
        this.cronExpression = cronExpression;
    }

    public ScheduleJob(String jobId, String jobName) {
        this.jobId = jobId;
        this.jobName = jobName;
    }

     


             3.创建定时任务状态接口

package com.mhc.common.scheduler;

/**
 * Job状态
 */
public interface JobStatus {
    /**禁用*/
    String STOPED="0";
    /**启用*/
    String RUNNING="1";
    /**删除*/
    String DELETED="2";
}

         4.定义配置类

配置类主要定义三个对象:

        (1)定时任务jobDetail:只要用来封装你要做什么,执行什么业务操作。

       (2)定时任务触发器jobTrigger:主要将定时任务jobDetail封装,同时封装cron表达式,说明什么时间触发定时任务或者多长时间触发刷新一次定时任务。

     (3)quartz调度工厂scheduler:主要将jobTrigger触发器封装,调用自己的api执行定时任务

package com.mhc.common.scheduler;

import org.quartz.Trigger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: mhc
 * Date: 2019-06-25
 * Time: 21:10
 */
@Configuration
public class QuartzConfigration {

    /**
     * 配置定时任务
     * @param task
     * @return
     */
    @Bean(name = "jobDetail")
    public MethodInvokingJobDetailFactoryBean detailFactoryBean(ScheduleDefaultTask task) {
        MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
         //是否并发执行即是否等待当前未执行完的任务
        jobDetail.setConcurrent(false);

        jobDetail.setName("default");// 设置任务的名字
        jobDetail.setGroup("default-group");// 设置任务的分组,这些属性都可以存储在数据库中,在多任务的时候使用
        jobDetail.setTargetObject(task);
        jobDetail.setTargetMethod("defaultExecute");
        return jobDetail;
    }

    /**
     * 配置定时任务的触发器
     * @param jobDetail
     * @return
     */
    @Bean(name = "jobTrigger")
    public CronTriggerFactoryBean cronJobTrigger(MethodInvokingJobDetailFactoryBean jobDetail) {
        CronTriggerFactoryBean tigger = new CronTriggerFactoryBean();
        tigger.setJobDetail(jobDetail.getObject());
        tigger.setCronExpression("0 0 0 1/1 * ?");// 初始时的cron表达式
        tigger.setName("default-tigger");// trigger的name
        return tigger;

    }

    /**
     * quartz调度工厂
     * @param cronJobTrigger
     * @return
     */
    @Bean(name = "scheduler")
    public SchedulerFactoryBean schedulerFactory(Trigger cronJobTrigger,MyAdaptableJobFactory myAdaptableJobFactory) {
        SchedulerFactoryBean bean = new S
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值