美文网首页
QuartzManager

QuartzManager

作者: 牧祎徉 | 来源:发表于2020-04-27 22:57 被阅读0次

    package com.cg.vboot.common.quartz.utils;

    import com.cg.vboot.common.domain.ScheduleJob;

    import org.apache.log4j.Logger;

    import org.quartz.*;

    import org.quartz.DateBuilder.IntervalUnit;

    import org.quartz.impl.matchers.GroupMatcher;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.stereotype.Service;

    import java.util.ArrayList;

    import java.util.List;

    import java.util.Set;

    /**

    *

    *

    * @title: QuartzManager.java

    * @description: 计划任务管理

    *

    */

    @Service

    public class QuartzManager {

    public final Logger log = Logger.getLogger(this.getClass());

    // private SchedulerFactoryBean schedulerFactoryBean

    // =SpringContextHolder.getBean(SchedulerFactoryBean.class);

    // @Autowired

    // @Qualifier("schedulerFactoryBean")

    // private SchedulerFactoryBean schedulerFactoryBean;

    @Autowired

    private Scheduler scheduler;

    /**

    * 添加任务

    *

    * @param scheduleJob

    * @throws SchedulerException

    */

    public void addJob(ScheduleJob job) {

    try {

    // 创建jobDetail实例,绑定Job实现类

    // 指明job的名称,所在组的名称,以及绑定job类

    Class<? extends Job> jobClass = (Class<? extends Job>) (Class.forName(job.getBeanClass()).newInstance()

    .getClass());

    JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(job.getJobName(), job.getJobGroup())// 任务名称和组构成任务key

    .build();

    // 定义调度触发规则

    // 使用cornTrigger规则

    Trigger trigger = TriggerBuilder.newTrigger().withIdentity(job.getJobName(), job.getJobGroup())// 触发器key

    .startAt(DateBuilder.futureDate(1, IntervalUnit.SECOND))

    .withSchedule(CronScheduleBuilder.cronSchedule(job.getCronExpression())).startNow().build();

    // 把作业和触发器注册到任务调度中

    scheduler.scheduleJob(jobDetail, trigger);

    // 启动

    if (!scheduler.isShutdown()) {

    scheduler.start();

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    /**

    * 获取所有计划中的任务列表

    *

    * @return

    * @throws SchedulerException

    */

    public List<ScheduleJob> getAllJob() throws SchedulerException {

    GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup();

    Set<JobKey> jobKeys = scheduler.getJobKeys(matcher);

    List<ScheduleJob> jobList = new ArrayList<ScheduleJob>();

    for (JobKey jobKey : jobKeys) {

    List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);

    for (Trigger trigger : triggers) {

    ScheduleJob job = new ScheduleJob();

    job.setJobName(jobKey.getName());

    job.setJobGroup(jobKey.getGroup());

    job.setDescription("触发器:" + trigger.getKey());

    Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());

    job.setJobStatus(triggerState.name());

    if (trigger instanceof CronTrigger) {

    CronTrigger cronTrigger = (CronTrigger) trigger;

    String cronExpression = cronTrigger.getCronExpression();

    job.setCronExpression(cronExpression);

    }

    jobList.add(job);

    }

    }

    return jobList;

    }

    /**

    * 所有正在运行的job

    *

    * @return

    * @throws SchedulerException

    */

    public List<ScheduleJob> getRunningJob() throws SchedulerException {

    List<JobExecutionContext> executingJobs = scheduler.getCurrentlyExecutingJobs();

    List<ScheduleJob> jobList = new ArrayList<ScheduleJob>(executingJobs.size());

    for (JobExecutionContext executingJob : executingJobs) {

    ScheduleJob job = new ScheduleJob();

    JobDetail jobDetail = executingJob.getJobDetail();

    JobKey jobKey = jobDetail.getKey();

    Trigger trigger = executingJob.getTrigger();

    job.setJobName(jobKey.getName());

    job.setJobGroup(jobKey.getGroup());

    job.setDescription("触发器:" + trigger.getKey());

    Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());

    job.setJobStatus(triggerState.name());

    if (trigger instanceof CronTrigger) {

    CronTrigger cronTrigger = (CronTrigger) trigger;

    String cronExpression = cronTrigger.getCronExpression();

    job.setCronExpression(cronExpression);

    }

    jobList.add(job);

    }

    return jobList;

    }

    /**

    * 暂停一个job

    *

    * @param scheduleJob

    * @throws SchedulerException

    */

    public void pauseJob(ScheduleJob scheduleJob) throws SchedulerException {

    JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());

    scheduler.pauseJob(jobKey);

    }

    /**

    * 恢复一个job

    *

    * @param scheduleJob

    * @throws SchedulerException

    */

    public void resumeJob(ScheduleJob scheduleJob) throws SchedulerException {

    JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());

    scheduler.resumeJob(jobKey);

    }

    /**

    * 删除一个job

    *

    * @param scheduleJob

    * @throws SchedulerException

    */

    public void deleteJob(ScheduleJob scheduleJob) throws SchedulerException {

    JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());

    scheduler.deleteJob(jobKey);

    }

    /**

    * 立即执行job

    *

    * @param scheduleJob

    * @throws SchedulerException

    */

    public void runAJobNow(ScheduleJob scheduleJob) throws SchedulerException {

    JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());

    scheduler.triggerJob(jobKey);

    }

    /**

    * 更新job时间表达式

    *

    * @param scheduleJob

    * @throws SchedulerException

    */

    public void updateJobCron(ScheduleJob scheduleJob) throws SchedulerException {

    TriggerKey triggerKey = TriggerKey.triggerKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());

    CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);

    CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression());

    trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();

    scheduler.rescheduleJob(triggerKey, trigger);

    }

    }

    相关文章

      网友评论

          本文标题:QuartzManager

          本文链接:https://www.haomeiwen.com/subject/pfzuwhtx.html