本文已参与「新人创作礼」活动,一起开启掘金创作之路。
配置、资源SchedulerFactory
Quartz以模块方式构架,因此,要使它运行,几个组件必须很好的咬合在一起。幸运的是,已经有了一些现存的助手可以完成这些工作。
所有的Scheduler实例由SchedulerFactory创建
Quartz的三个核心概念:调度器、任务、触发器,三种之间的关系是:
graph TD
A[SchedulerFactory] --> B[Scheduler 调度器]
B --> C[Trigger 触发器]
B --> D[Job 任务]
一个作业,比较重要的三个要素就是Scheduler、JobDetail、Trigger;Trigger对于Job而言就好比一个驱动器;没有触发器来定时驱动作业,作业无法运行;对于Job而言。一个Job可以对应多个Trigger,但对于Trigger而言,一个Trigger只能对应一个Job;所以一个Trigger只能被指派给一个Job;如果你需要一个更复杂的触发计划,可以创建多个Trigger并指派它们给同一个Job。
Scheudler的创建方式: 1、StdSchedulerFactory: Quartz默认的SchedulerFactory
- 使用一组参数(java.unit.Properties)来创建和初始化Quartz调度器。
- 配置参数一般存储在quartz.properties文件中
- 调用getScheduler方法就能创建和初始化调度器对象
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
用法一:输出调度开始时间(使得任务和触发器关联): Date schedulerJob(JobDetail jobDetail, Trigger trigger)
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("调度器开始的时间是:"+dateFormat.format(scheduler.scheduleJob(job, trigger)));
用法二:启动任务调度 void start();
scheduler.start();
用法三:任务调度挂起,暂停操作 void standby()
// Scheduer执行2秒后自动挂起
Thread.sleep(2000L);
scheduler.standby();
// Scheduler执行5秒后自动开启
Thread.sleep(5000L);
scheduler.start();
用法四:关闭任务调度 void shutdown() shutdown(true):表示等待所有正在执行的Job执行完毕后,再关闭Scheduler; shutdown(false):表示直接关闭Scheduler。
2、DirectSchedulerFactory DirectSchedulerFactory是对SchedulerFactory的之间实现,通过它可以之间构建Scheduler、threadpool等
DirectSchedulerFactory directSchedulerFactory = DirectSchedulerFactory.getInstance();
Scheduler scheduler = directSchedulerFactory.getScheduler();