项目代码:
https://github.com/yuleiqq/quartz_example/tree/master/quartz_study
使用Quartz 的调度器之前,需要先实例化该调度器(Scheduler) . 实例化完成之后,就可以启动它了.
在启动调度器之前,或者在调度器处于暂停状态时,触发器不会触发(作业不会执行)。
下面来看实际的代码
1、定义一个任务Job ,打印当前的时间
package com.example01.job;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Date;
/**
* @author : yulei
* @data : 2020/1/15 16:07
* @Version : 1.0
**/
public class HelloJob implements Job {
private static Logger log = LoggerFactory.getLogger(HelloJob.class);
public void execute(JobExecutionContext context) throws JobExecutionException {
//打印当前日期
log.debug("Hello World! - " + new Date());
}
}
2、定义触发器,并绑定到调度器
package com.example01;
import com.example01.job.HelloJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import static org.quartz.DateBuilder.evenMinuteDate;
import static org.quartz.JobBuilder.*;
import static org.quartz.TriggerBuilder.newTrigger;
/**
* @author : yulei
* @data : 2020/1/15 15:58
* @Version : 1.0
**/
public class SimpleExample {
private Logger log = LoggerFactory.getLogger(SchedulerTest.class);
public void run () throws Exception {
//实例化调度器
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
//定义一个JobDetail ,并绑定到我们的 Job 。 JobBuilder 用户来实例化JobDetail
JobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1").build();
Date runTime = evenMinuteDate(new Date());
//定一个触发器Trigger, 立即运行,之后每隔40秒一次
Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();
//告诉调度器使用trigger 调度我们的job
scheduler.scheduleJob(job, trigger);
log.info(job.getKey() + " will run at: " + runTime);
//启动调度器 , 在启动调度器之前,任务和触发器不会运行
scheduler.start();
log.info("------- Started Scheduler -----------------");
log.info("------- Waiting 65 seconds... -------------");
//休眠65秒,让任务有机会执行
TimeUnit.SECONDS.sleep(65);
// 关闭调度器
log.info("------- Shutting Down ---------------------");
scheduler.shutdown(true);
log.info("------- Shutdown Complete -----------------");
}
public static void main(String[] args) throws Exception {
SimpleExample simpleExample = new SimpleExample();
simpleExample.run();
}
}
运行打印内容如下:
[INFO] 15 一月 04:25:19.857 下午 main [org.quartz.impl.StdSchedulerFactory]
Using default implementation for ThreadExecutor
[INFO] 15 一月 04:25:19.914 下午 main [org.quartz.core.SchedulerSignalerImpl]
Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
[INFO] 15 一月 04:25:19.916 下午 main [org.quartz.core.QuartzScheduler]
Quartz Scheduler v.2.3.0 created.
[INFO] 15 一月 04:25:19.919 下午 main [org.quartz.simpl.RAMJobStore]
RAMJobStore initialized.
[INFO] 15 一月 04:25:19.928 下午 main [org.quartz.core.QuartzScheduler]
Scheduler meta-data: Quartz Scheduler (v2.3.0) 'MyScheduler' with instanceId 'NON_CLUSTERED'
Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 3 threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
[INFO] 15 一月 04:25:19.928 下午 main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler 'MyScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
[INFO] 15 一月 04:25:19.928 下午 main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler version: 2.3.0
[INFO] 15 一月 04:25:19.956 下午 main [com.example01.SchedulerTest]
group1.job1 will run at: Wed Jan 15 16:26:00 CST 2020
[INFO] 15 一月 04:25:19.958 下午 main [org.quartz.core.QuartzScheduler]
Scheduler MyScheduler_$_NON_CLUSTERED started.
[INFO] 15 一月 04:25:19.958 下午 main [com.example01.SchedulerTest]
------- Started Scheduler -----------------
[INFO] 15 一月 04:25:19.959 下午 main [com.example01.SchedulerTest]
------- Waiting 65 seconds... -------------
[DEBUG] 15 一月 04:26:00.012 下午 MyScheduler_Worker-1 [com.example01.job.HelloJob]
Hello World! - Wed Jan 15 16:26:00 CST 2020
[INFO] 15 一月 04:26:24.961 下午 main [com.example01.SchedulerTest]
------- Shutting Down ---------------------
[INFO] 15 一月 04:26:24.961 下午 main [org.quartz.core.QuartzScheduler]
Scheduler MyScheduler_$_NON_CLUSTERED shutting down.
[INFO] 15 一月 04:26:24.961 下午 main [org.quartz.core.QuartzScheduler]
Scheduler MyScheduler_$_NON_CLUSTERED paused.
[INFO] 15 一月 04:26:25.148 下午 main [org.quartz.core.QuartzScheduler]
Scheduler MyScheduler_$_NON_CLUSTERED shutdown complete.
[INFO] 15 一月 04:26:25.148 下午 main [com.example01.SchedulerTest]
------- Shutdown Complete -----------------
程序只执行一次,因为还没有使用周期性调度.
扫描二维码关注公众号,回复:
8675304 查看本文章