SpringBoot + Quartz 实现动态新增和删除定时任务

最近需要做一个简单的监控系统,需要定时任务查询不同数据库表的数据是否正常,需要动态的增加定时任务与监控SQL,这里简单记一下

1、 pom.xml 依赖配置

这里用的springboot 是1.5.10,如果是2.x版本已经集成了quartz

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.10.RELEASE</version>
        <relativePath/>
    </parent>
<dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.3.0</version>
        </dependency>
2、实体类 SchedulerJobEntity
@Data
public class SchedulerJobEntity extends BaseEntity {

    private static final long serialVersionUID = 6678656140297128519L;

    private String jobName;

    private String beanName;

    private String methodName;

    private String params;

    private String cronExpression;

    private String status;

    private String remark;

}
3、ScheduleJob 和 JobContext

任务执行时,根据SchedulerJobEntity中的类名和方法名称获取需要执行的定时任务,JobContext用于参数传递

@Data
public class JobContext implements Serializable {

    private static final long serialVersionUID = -8127498514244724662L;

    /**
     * 任务ID
     */
    private Integer jobId;

    /**
     * 任务名称
     */
    private String jobName;

    /**
     * jobEntity的参数
     */
    private String params;

    /**
     * 执行cron表达式
     */
    private String cronExpression;

    /**
     * 如果{@link SchedulerJobEntity#getParams()}是json格式,那么会把里面的值存入此map,这里也可以加入其它参数
     */
    private Map<String, Object> paramMap = new HashMap<>();
    /**
     * 执行结果
     */
    private Map<String, Object> resultMap = new HashMap<>();
}
@Slf4j
public class ScheduleJob extends QuartzJobBean {

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        SchedulerJobEntity jobEntity = (SchedulerJobEntity) context.getMergedJobDataMap().get(JOB_PARAM_KEY);
        SchedulerJobLogService scheduleJobLogService = SpringUtil.getBean(SchedulerJobLogService.class);

        SchedulerJobLogEntity logEntity = new SchedulerJobLogEntity();
        logEntity.setJobId(jobEntity.getId());
        logEntity.setJobName(jobEntity.getJobName());
        logEntity.setParams(jobEntit
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值