Quartz是功能丰富的开源作业调度库,几乎可以集成在任何Java应用程序中。
Quartz可用于创建简单或复杂的计划,以执行数十、数百甚至数万个作业,它将任务定义为标准的Java组件。
项目部署
项目至少需要Quartz核心库quartz-xyzjar(xyz是版本号),在其类路径。
Quartz几乎没有依赖关系,但至少需要sl4j-api.jar。如果需要将计划数据存储到数据库,则需要c3p0.
如果需要使用内置的作业,可以使用quartz-jobs.jar。
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
实例化并启动调度程序
调度程序由工程创建,但在调用start()方法之前,不会执行任何作业
// Grab the Scheduler instance from the Factory
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// and start it off
scheduler.start();
声明job
定义job
public class MyJob implements org.quartz.Job {
public MyJob() {
}
public void execute(JobExecutionContext context) throws JobExecutionException {
System.err.println("Hello World! MyJob is executing.");
}
}
将job加入调度
Quartz提供Fluent API进行DSL定义,首先需要引入相应的类
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.JobBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;
将job加入到调度
// define the job and tie it to our MyJob class
JobDetail job = newJob(MyJob.class)
.withIdentity("job1", "group1")
.build();
// Trigger the job to run now, and then repeat every 40 seconds
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(40)
.repeatForever())
.build();
// Tell quartz to schedule the job using our trigger
scheduler.scheduleJob(job, trigger);
配置文件
Quartz的配置文件quartz.properties
org.quartz.scheduler.instanceName = MyScheduler
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore