spring quartz 动态添加任务 删除任务 停止任务 启动任务

只使用spring容器生成 Scheduler   调度器对象  ,添加任务、删除任务、停止任务、启动任务全部使用quartz框架的方法及类。

通过下面的类对调度器中的任务及触发器进行操作    Scheduler对象从spring中获取   JobInfo对象为自定义的任务信息。

QuartzJob 是自定义的实现quartz的Job接口的任务,类中编写自己的业务逻辑。
/**
 * 对quartz调度器中的任务进行操作
 *
 * @author Administrator
 *
 */
public class ScheduleJob {

    /**
     * 将任务上下文中的任务添加quartz的调度器
     *
     * @param s
     * @throws SchedulerException
     */
    public void schedule(Scheduler s) throws SchedulerException {
        // 获取任务信息
        List<JobInfo> infoList = JobDataContext.getJobInfoList();
        for (JobInfo info : infoList) {
            this.addJob2Scheduler(s, info);
        }
    }
    /**
     * 将任务添加到quartz调度器
     * @param s
     * @param info
     * @throws SchedulerException
     */
    public void addJob2Scheduler(Scheduler s,JobInfo info) throws SchedulerException
    {
        TriggerKey triggerKey = TriggerKey.triggerKey(info.getJobName(),
                info.getJobGroup());
        CronTrigger cronTrigger = (CronTrigger) (s.getTrigger(triggerKey));
        if (cronTrigger == null) {
            // 任务未添加到调度器
            JobDetail jobDetail = JobBuilder.newJob(QuartzJob.class)
                    .withIdentity(info.getJobName(), info.getJobGroup())
                    .build();
            jobDetail.getJobDataMap().put("jobinfo", info);
            CronScheduleBuilder cs = CronScheduleBuilder.cronSchedule(info
                    .getCronExpression());
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity(info.getJobName(), info.getJobGroup())
                    .withSchedule(cs).build();
            trigger.getJobDataMap().put("jobinfo", info);
            s.scheduleJob(jobDetail, trigger);
        } else {
            // 任务已经添加更新crontrigger
            CronScheduleBuilder cs = CronScheduleBuilder.cronSchedule(info
                    .getCronExpression());
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity(info.getJobName(), info.getJobGroup())
                    .withSchedule(cs).build();
            s.rescheduleJob(triggerKey, trigger);
        }
    }
    /**
     * 获取quartz中计划的任务
     * @param scheduler
     * @return
     * @throws SchedulerException
     */
    public List<JobInfo> getPlainJobinScheduler(Scheduler scheduler) throws SchedulerException
    {
        GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup();
        Set<JobKey> jobKeys = scheduler.getJobKeys(matcher);
        List<JobInfo> jobInfoList = new ArrayList<JobInfo>();
        for (JobKey jobKey : jobKeys) {
            List<? extends Trigger> triggers = scheduler
                    .getTriggersOfJob(jobKey);
            for (Trigger trigger : triggers) {
                JobInfo oldinfo = (JobInfo)trigger.getJobDataMap().get("jobinfo");
                JobInfo jobinfo = new JobInfo();
                jobinfo.setJobName(jobKey.getName());
                jobinfo.setJobGroup(jobKey.getGroup());
                jobinfo.setJobId(oldinfo.getJobId());
                jobinfo.setCronExpression(oldinfo.getCronExpression());
                jobinfo.setJobDesc("触发器:" + trigger.getKey());
                jobinfo.setJobTable(oldinfo.getJobTable());
                jobinfo.setJobType(oldinfo.getJobType());
                jobinfo.setJobSql(oldinfo.getJobSql());
                Trigger.TriggerState triggerState = scheduler
                        .getTriggerState(trigger.getKey());
                jobinfo.setJobStatus(triggerState.name());
                if (trigger instanceof CronTrigger) {
                    CronTrigger cronTrigger = (CronTrigger) trigger;
                    String cronExpression = cronTrigger.getCronExpression();
                    jobinfo.setCronExpression(cronExpression);
                }
                jobInfoList.add(jobinfo);
            }
        }
        return jobInfoList;
    }
    /**
     * quartz调度器暂停任务调度
     * @param s
     * @param jobinfo
     * @throws SchedulerException
     */
    public void pauseJob(Scheduler s,JobInfo jobinfo) throws SchedulerException
    {
        JobKey jobKey = JobKey.jobKey(jobinfo.getJobName(), jobinfo.getJobGroup());
        s.pauseJob(jobKey);
    }
    /**
     * quartz调度器恢复任务调度
     * @param s
     * @param jobinfo
     * @throws SchedulerException
     */
    public void resumeJob(Scheduler s,JobInfo jobinfo) throws SchedulerException
    {
        JobKey jobKey = JobKey.jobKey(jobinfo.getJobName(), jobinfo.getJobGroup());
        s.resumeJob(jobKey);
    }
    /**
     * quartz调度器删除任务
     * @param s
     * @param jobinfo
     * @throws SchedulerException
     */
    public void deleteJob(Scheduler s,JobInfo jobinfo) throws SchedulerException
    {
        JobKey jobKey = JobKey.jobKey(jobinfo.getJobName(), jobinfo.getJobGroup());
        s.deleteJob(jobKey);
    }
    /**
     * quartz调度器立刻运行任务(只运行一次,随机生成Trigger)
     * @param s
     * @param jobinfo
     * @throws SchedulerException
     */
    public void runJobOneTime(Scheduler s,JobInfo jobinfo) throws SchedulerException
    {
        JobKey jobKey = JobKey.jobKey(jobinfo.getJobName(), jobinfo.getJobGroup());
        s.triggerJob(jobKey);
    }
}

猜你喜欢

转载自blog.csdn.net/ld2007081055/article/details/37599795
今日推荐