定时任务Quartz

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/qq_15764943/article/details/85245376

简介

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.3.0

导入Jar

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.0</version>
</dependency>

对象

调度对象

SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler sched = schedulerFactory.getScheduler();

自定义任务类

//实现Job接口,并重写execute方法
public class TestJob implements Job{
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        //业务代码...
    }
}

任务明细

 // 指定任务类,任务名,任务组
JobDetail jobDetail= JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName).build();

// 通过调动对象获取任务明细
JobDetail detail = sched.getJobDetail(JobKey.jobKey(jobName, jobGroupName));

触发器

// 触发器
TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
// 触发器名,触发器组
triggerBuilder.withIdentity(triggerName, triggerGroupName);
triggerBuilder.startNow();
// 触发器时间设定,指定Cron表达式
triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));
// 创建Trigger对象
CronTrigger trigger = (CronTrigger) triggerBuilder.build();

//通过调动对象获取触发器
Scheduler sched = schedulerFactory.getScheduler();
TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);

执行和关闭

①执行指定任务

 // 指定任务和触发器
 sched.scheduleJob(jobDetail, trigger);
 // 执行
 if (!sched.isShutdown()) {
     sched.start();
 }   

②执行全部任务

Scheduler sched = schedulerFactory.getScheduler();
sched.start();

③关闭全部任务

Scheduler sched = schedulerFactory.getScheduler();
 if (!sched.isShutdown()) {
     sched.shutdown();
 }

删除任务

  Scheduler sched = schedulerFactory.getScheduler();
  TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
  sched.pauseTrigger(triggerKey);// 暂停触发器
  sched.unscheduleJob(triggerKey);// 移除触发器
  sched.deleteJob(JobKey.jobKey(jobName, jobGroupName));// 删除任务

暂停任务

 Scheduler scheduler = schedulerFactory.getScheduler();
 JobKey jobKey = JobKey.jobKey(jobName, jobGroupName);
 scheduler.pauseJob(jobKey);

恢复任务

 Scheduler scheduler = schedulerFactory.getScheduler();
 JobKey jobKey = JobKey.jobKey(jobName, jobGroupName);
 scheduler.resumeJob(jobKey);

猜你喜欢

转载自blog.csdn.net/qq_15764943/article/details/85245376