- Quartz简介
官方网站:http://www.quartz-scheduler.org
- Quartz是一个功能丰富的开源作业调度框架; - 几乎可以集成到任何java应用中,小到单体应用,大到大型电子商务系统; - Quartz可以用来执行成千上万的简单或复杂调度任务; - Quartz的任务被定义为一组标准的java组件,几乎可以执行任何编程任务; - Quartz包含很多企业级功能:支持JTA事务(分布式的事务)和集群;
- 用途
定时发送邮件、短信通知; 定时做数据同步;
- 特点
强大调度功能; 灵活的使用方式; 提供了集群功能; - 同一个时间点,只有一个任务可以执行; - 如果有一个服务宕机了,那么其他Quartz服务可以接管任务继续执行;
- 核心API
Job接口:定义任务需要实现Job接口 - JonDetail:具体定义任务实例(任务名称等) Trigger:触发器 - SimpleTrigger:一个任务何时执行,执行多少次,执行多长时间 - CronTrigger:秒 分 时 天 月 周 [年] 0 0 8 ? 5 SUN#2 Scheduler:调度器->使用Trigger定义的调度规则去执行任务 Scheduler.scheduleJob(Trigger, JobDetail) JobKey、TriggerKey、JobDataMap、JobExecutionContext...
- 其他调度框架
Elastic-Job:http://elasticjob.io/index_zh.html XXL-JOB:https://github.com/xuxueli/xxl-job/ XXL-JOB作者许雪里的博客:http://www.xuxueli.com/blog/
- 一个Quartz工程实例
目录结构:
pom.xml:
HelloJob.java:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.etoak.et1906.quartz</groupId> <artifactId>quartz-java</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <dependencies> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency> </dependencies> </project>
SimpleTriggerMain.java:package com.etoak.job; import java.text.SimpleDateFormat; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class HelloJob implements Job { public HelloJob() { //System.out.println("HelloJob实例被创建了"); } @Override public void execute(JobExecutionContext context) throws JobExecutionException { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS"); System.out.println(dateFormat.format(new Date()) + "-Hello World!"); } }
CronTriggerMain.java:package com.etoak; // 导入JobBuilder中的newJob()静态方法 import static org.quartz.JobBuilder.newJob; import java.util.Date; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SimpleScheduleBuilder; import org.quartz.SimpleTrigger; import org.quartz.TriggerBuilder; import org.quartz.TriggerKey; import org.quartz.impl.StdSchedulerFactory; import com.etoak.job.HelloJob; public class SimpleTriggerMain { public static void main(String[] args) throws SchedulerException { // 1. 创建JobDetail JobDetail jobDetail = newJob(HelloJob.class)// .withIdentity("hello", "hello")// .build(); // 2. 创建Trigger // Trigger trigger = TriggerBuilder.newTrigger()// // .withIdentity("hello", "hello")// // .startNow()// 立即执行 // .withSchedule(SimpleScheduleBuilder// // .simpleSchedule()// // .withIntervalInSeconds(5)// 每隔5秒钟执行 // .repeatForever()// 永远执行 // ).build(); // 分别获取2秒和10秒后的时间 Date current = new Date(); long currentMills = current.getTime(); Date twoSecondsAfter = new Date(currentMills + 2000L); Date tenSecondsAfter = new Date(currentMills + 10000L); // 任务2: 两秒后执行,之后每隔5秒钟打印一次Hello World,重复5次; TriggerKey triggerKey = new TriggerKey("hello", "hello"); // SimpleTrigger trigger = TriggerBuilder// // .newTrigger()// // .withIdentity(triggerKey)// // .startAt(twoSecondsAfter) // 两秒后执行 // .withSchedule(SimpleScheduleBuilder// // .simpleSchedule()// // .withIntervalInSeconds(5)// 每隔5秒执行 // .withRepeatCount(5) // 重复5次 // ).build(); // 任务3: 两秒后执行,之后每隔5秒钟打印一次Hello World,10秒后停止; SimpleTrigger trigger = TriggerBuilder.newTrigger() // .withIdentity("hello")// .startAt(twoSecondsAfter)// 两秒后执行 .endAt(tenSecondsAfter)// 10秒后停止 .withSchedule(SimpleScheduleBuilder// .simpleSchedule()// .withIntervalInSeconds(5)// .repeatForever()// ).build(); // 3. 创建Scheduler Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.scheduleJob(jobDetail, trigger); scheduler.start(); } }
package com.etoak; import org.quartz.CronScheduleBuilder; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import com.etoak.job.HelloJob; public class CronTriggerMain { public static void main(String[] args) throws SchedulerException { // 1. 创建JobDetail JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)// .withIdentity("hello")// .build(); // 2. 创建Trigger Trigger trigger = TriggerBuilder// .newTrigger()// .withIdentity("hello")// .withSchedule(CronScheduleBuilder// .cronSchedule("5,15 14,16 17 * * ?")) .build(); // 3. 创建Scheduler Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.scheduleJob(jobDetail, trigger); scheduler.start(); } }
Quartz简介及快速上手
最新推荐文章于 2022-04-04 15:23:57 发布