quartz 操作

我们先封装一个作业调度实体类:jobTrigger

private String key; //唯一key
private String jobName; //任务名字
private String jobGroup; //任务组别
private String jobClassName; //执行的类名
private String triggerName; //触发器名字
private String triggerGroup; //触发器组别
private String cronExpession; // cron表达式
private Bool runState; //启动状态
private Date timesTriggered; //起始时间
private Date endTimeTriggered; //结束时间
private Long repeatCount; //重复次数
private Long repeatInterval; //间隔
private Bool isCron; //是否cron

 

 引用

  @Autowired
  private Scheduler scheduler;

1.初始化 触发器 

  注意:起始时间如果少于当前时间,在执行 

scheduler.scheduleJob(jobDetail, trigger);
后会立即将任务执行一次.

触发器只介绍了 简单模式和cron 两种模式,看代码

 private  Trigger initTrigger(JobTrigger jobTrigger) {
        TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
        String triggerName = jobTrigger.triggerName;
        String triggerGroup = jobTrigger.triggerGroup; 
        triggerBuilder.withIdentity(triggerName, triggerGroup); 
        if(DataUtil.isNotEmpty(jobTrigger.timesTriggered))
        {
            if(jobTrigger.timesTriggered<new Date())
            {
                triggerBuilder.startNow();
            }
            else
            {
                Date startAt = new Date();
                triggerBuilder.startAt(startAt);
            }
        }
        else
        {
            triggerBuilder.startNow();
        }
        if(DataUtil.isNotEmpty(jobTrigger.endTimeTriggered))
        {
            Date endAt = jobTrigger.endTimeTriggered;
            triggerBuilder.endAt(endAt); 
        }

       if(jobTrigger.isCron)
       {
 triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(jobTrigger.cronExpession));
       }
       else{
           SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule();   simpleScheduleBuilder.withIntervalInSeconds(jobTrigger.getSjtRepeatInterval().intValue());
           if(jobTrigger.repeatCount>0)
           {
               simpleScheduleBuilder.withRepeatCount(jobTrigger.repeatCount);
           }
           else
           {
               simpleScheduleBuilder.repeatForever();
           }
           triggerBuilder.withSchedule(simpleScheduleBuilder);
       }
        Trigger trigger = triggerBuilder.build();
        return trigger;
    }

2.初始化 触发器

 private  JobDetail initJobDetail(JobTrigger jobTrigger){
            String JobName =jobTrigger.jobName;
            String JobGroup = jobTrigger.jobGroup;
            Class<? extends BaseJob> jobClass = (Class<? extends BaseJob>)Class.forName(jobTrigger.jobClassName());
            JobDetail jobDetail = JobBuilder.newJob(jobClass)
                    .withIdentity(JobName, JobGroup).withDescription(jobTrigger.getSjtJobName())
                    .build();
            return jobDetail;
    }

 3.新增任务

 public void addJob(JobTrigger jobTrigger) {
        JobDetail jobDetail = initJobDetail(jobTrigger);
        Trigger trigger = initTrigger(jobTrigger);
        if (DataUtil.isNotEmpty(jobDetail) && DataUtil.isNotEmpty(trigger)) {

                if (!scheduler.checkExists(trigger.getKey())) {

                    scheduler.scheduleJob(jobDetail, trigger);// 设置调度相关的Job
                }
                if (jobTrigger.runState) {
                    scheduler.resumeJob(jobDetail.getKey()); //启动

                } else {
                    scheduler.pauseJob(jobDetail.getKey());//停止
                }
         
        }
    }

4.修改任务 触发时间

 public  void modifyJobTime(JobTrigger jobTrigger) {
        String triggerName = jobTrigger.triggerName;
            String triggerGroup =jobTrigger.triggerGroup; 
            TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroup);
            CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
            if (trigger == null) {
                return;
            }
            Trigger newTrigger =  this.initTrigger(jobTrigger);
            scheduler.rescheduleJob(triggerKey, newTrigger);
    }

5.移除任务

  public  void removeJob(JobTrigger jobTrigger) {
            String triggerName = jobTrigger.triggerName;
            String triggerGroup =jobTrigger.triggerGroup;
            String JobName =jobTrigger.jobName;
            String JobGroup = jobTrigger.jobGroup; 
            TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroup);
            JobKey  jobKey =  JobKey.jobKey(JobName,JobGroup);
            // 停止触发器
            scheduler.pauseTrigger(triggerKey);
            // 移除触发器
            scheduler.unscheduleJob(triggerKey);
            // 删除任务
            scheduler.pauseJob(jobKey);
            scheduler.deleteJob(jobKey);
    }

6.启动所有的定时任务

scheduler.start();

7 .关闭任务

scheduler.shutdown();

8 立即执行任务

public void executionJob(JobTrigger jobTrigger) throws  Exception {
        String JobName = jobTrigger.jobName;
        String JobGroup = jobTrigger.jobGroup;
        JobKey jobKey = JobKey.jobKey(JobName, JobGroup);
        if (this.scheduler.checkExists(jobKey)) {
            this.scheduler.triggerJob(jobKey);
        }
    }

9.暂停所有任务

scheduler.pauseAll();

10 .暂停任务

  public  void pauseJob(JobTrigger jobTrigger) throws SchedulerException
    {
        String JobName =jobTrigger.jobName;
        String JobGroup = jobTrigger.jobGroup;
        JobKey jobKey= JobKey.jobKey(JobName,JobGroup);
        String triggerName =  jobTrigger.triggerName;
        String triggerGroup =  jobTrigger.triggerGroup; 
        TriggerKey triggerKey = TriggerKey.triggerKey(triggerName,triggerGroup); 
        scheduler.pauseJob(jobKey);
        scheduler.pauseTrigger(triggerKey);
    }

11.重启所有任务

scheduler.resumeAll();

12.清理所有的任务

scheduler.clear();

13.重启任务

 public  void resumeJob(JobTrigger jobTrigger) throws SchedulerException { 
        String JobName = jobTrigger.jobName;
        String JobGroup =jobTrigger.jobGroup; 
        String triggerName = jobTrigger.triggerName();
        String triggerGroup = jobTrigger.triggerGroup(); 
        JobKey jobKey = JobKey.jobKey(JobName, JobGroup);
        TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroup);
        if (!this.scheduler.checkExists(triggerKey)&&!this.scheduler.checkExists(jobKey)) {
            this.addJob(jobTrigger);
        }
        if (this.scheduler.checkExists(triggerKey)) {
            scheduler.resumeTrigger(triggerKey);
        }
        if (this.scheduler.checkExists(jobKey)) {
            scheduler.resumeJob(jobKey);
        }
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值