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

来源:互联网 发布:画江湖之不良人网络剧 编辑:程序博客网 时间:2024/06/12 23:52

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 */@Componentpublic 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;        }    }}

代码链接:

点击打开链接

 


原创粉丝点击