基本概念
- Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。
- Quartz 可以与J2EE 与 J2SE 应用程序相结合也可以单独使用。
- Quartz 允许程序开发人员根据时间的间隔来调度作业。
- Quartz 实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。
Quartz 核心概念
Job表示一个工作,要执行的具体内容。此接口中只有一个方法,如下:
void execute(JobExecutionContext context);
JobDetail表示一个具体之可行的调度程序,Job是这个可执行调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略。
- Trigger代表一个调度参数的配置,什么时候去调。
- Scheduler代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。
Quartz 简单使用
新建一个Spring Boot工程,添加Quartz Scheduler依赖。
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.text.SimpleDateFormat;
import java.util.Date;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
public class QuartzTest implements Job {
public static void main(String[] args) {
try {
// 创建一个scheduler(调度器)
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 启动scheduler
scheduler.start();
// 创建一个Job
JobDetail job = JobBuilder.newJob(QuartzTest.class)
.withIdentity("job1", "group1")
.build();
// 创建一个Trigger,每2秒执行1次
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(2)
.repeatForever())
.build();
// Tell quartz to schedule the job using our trigger
scheduler.scheduleJob(job, trigger);
Thread.sleep(20000);
// 关闭scheduler
scheduler.shutdown();
} catch (SchedulerException | InterruptedException se) {
se.printStackTrace();
}
}
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
// 线程不安全
System.out.println("QuartzTest.excute " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "\t\t" + Thread.currentThread().getName());
}
}
执行结果: