spring-boot+quartz实现web页面增删改定时任务

本文介绍了一个Spring Boot项目如何集成Quartz实现定时任务管理。通过TaskUtil类,可以在Web页面上进行任务的添加、删除、修改等操作。文章还提供了关键代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring-boot集成quartz,支持在web页面中添加任务,暂停任务,继续执行任务,修改任务执行周期,测试任务,删除任务,以及quartz集群模式。


添加的任务需要实现Job接口,并有spring管理bean,例如DemoService,DemoService2

这个项目也集成了spring-data,可以用来写业务。


TaskUtil类实现了任务的增加,删除,修改,以及测试:


package com.htxa.wecare.util;

import com.htxa.wecare.StartWebApplication;
import com.htxa.wecare.model.CronTriggerWithState;
import com.htxa.wecare.model.TaskEntity;
import org.quartz.*;
import org.quartz.impl.StdScheduler;
import org.quartz.impl.matchers.GroupMatcher;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

/**
 * Description:
 *
 * @author <a href="mailto:erdongritian@foxmail.com">chenhao</a>
 *         Create Time: 2017/8/18 10:56
 */
@Component
public class TaskUtil {

    @Resource
    private StdScheduler stdScheduler;

    public String addTask(TaskEntity taskEntity){
        try {
            JobDataMap map = new JobDataMap();
            map.put("targetObject", taskEntity.getTaskService());
            map.put("targetMethod", "execute");
            JobDetail jobDetail = newJob(DetailQuartzJobBean.class).withIdentity(taskEntity.getTaskService())
                    .usingJobData(map).storeDurably().requestRecovery().build();

            CronTrigger cronTrigger=newTrigger().forJob(jobDetail).withIdentity(taskEntity.getTaskService(), Scheduler.DEFAULT_GROUP)
                    .withDescription(taskEntity.getDescription())
                    .withSchedule(cronSchedule(taskEntity.getCronExpression())).build();
            stdScheduler.scheduleJob(jobDetail,cronTrigger);
            return "SUCCESS";
        } catch (ObjectAlreadyExistsException e) {
            e.printStackTrace();
            return e.getMessage();
        }catch (RuntimeException e) {
            e.printStackTrace();
            return e.getMessage();
        } catch (SchedulerException e) {
            e.printStackTrace();
            return e.getMessage();
        }catch (Exception e){
            e.printStackTrace();
            return e.getMessage();
        }

    }

    public Boolean deleteTask(String triggerName){
        try {
            TriggerKey triggerKey=new TriggerKey(triggerName, null);
            JobKey jobKey=new JobKey(triggerName,null);
            stdScheduler.unscheduleJob(triggerKey);
            stdScheduler.deleteJob(jobKey);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    public String modifySchedule(TaskEntity taskEntity){
        try {
            JobKey jobKey=new JobKey(taskEntity.getTaskService(),null);
            JobDetail jobDetail=stdScheduler.getJobDetail(jobKey);

            CronTrigger cronTrigger=newTrigger().forJob(jobDetail).withIdentity(taskEntity.getTaskService(), Scheduler.DEFAULT_GROUP)
                    .withDescription(taskEntity.getDescription())
                    .withSchedule(cronSchedule(taskEntity.getCronExpression())).build();

            TriggerKey triggerKey=new TriggerKey(taskEntity.getTaskService(), null);
            stdScheduler.rescheduleJob(triggerKey,cronTrigger);
            return "SUCCESS";
        } catch (ObjectAlreadyExistsException e) {
            e.printStackTrace();
            return e.getMessage();
        }catch (RuntimeException e) {
            e.printStackTrace();
            return e.getMessage();
        } catch (SchedulerException e) {
            e.printStackTrace();
            return e.getMessage();
        }catch (Exception e){
            e.printStackTrace();
            return e.getMessage();
        }
    }

    public Boolean pauseTase(String triggerName){
        try {
            TriggerKey triggerKey=new TriggerKey(triggerName, null);
            stdScheduler.pauseTrigger(triggerKey);
            return true;
        } catch (SchedulerException e) {
            e.printStackTrace();
            return false;
        }
    }

    public Boolean resumeTask(String triggerName){
        try {
            TriggerKey triggerKey=new TriggerKey(triggerName, null);
            stdScheduler.resumeTrigger(triggerKey);
            return true;
        } catch (SchedulerException e) {
            e.printStackTrace();
            return false;
        }
    }

    public List<CronTriggerWithState> getAllTask(){
        List<CronTriggerWithState> list=new ArrayList<>();
        try {
            Set<TriggerKey> triggerKeys=stdScheduler.getTriggerKeys(GroupMatcher.anyTriggerGroup());
            for(TriggerKey key:triggerKeys){
                CronTriggerWithState trigger=new CronTriggerWithState();
                trigger.setCronTrigger((CronTrigger) stdScheduler.getTrigger(key));
                trigger.setStateName(stdScheduler.getTriggerState(key).name());
                list.add(trigger);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

    public Boolean testTask(String taskService){
        try {
            Job job=(Job) StartWebApplication.applicationContext.getBean(taskService);
            job.execute(null);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

}

代码链接:

点击打开链接

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值