当前位置: 首页 > 工具软件 > Quartz Web > 使用案例 >

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

井昊乾
2023-12-01

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;
        }
    }

}

代码链接:

点击打开链接

 


 类似资料: