基本概念
- 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();// 启动schedulerscheduler.start();// 创建一个JobJobDetail 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 triggerscheduler.scheduleJob(job, trigger);Thread.sleep(20000);// 关闭schedulerscheduler.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());}}
执行结果:
