Quartz
1、Quartz使用
1.1 核心类说明
Scheduler: 调度器。所有的调度都是由它控制,是Quartz的大脑,所有任务都是由它来管理
Job: 任务,想定时执行的事情(定义业务逻辑)
JobDetail: 基于Job,进一步包装。其中关联一个Job,并为Job指定更详细的属性,比如标识等
Trigger: 触发器。可以指定给某个任务,指定任务的触发机制。
1.2 创建项目
创建Maven项目
配置GroupId和ArtifactId
1.3导入依赖
在pom.xml中引入如下依赖:
1 2 3 4 5 6 7
|
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.3</version> </dependency>
|
1.4 定义Job
在src目录创建一个类,命名为 HelloQuartz,实现Job接口。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class HelloQuartz implements Job{
@Override public void execute(JobExecutionContext context) throws JobExecutionException { JobDetail jobDetail = context.getJobDetail();
JobKey key = jobDetail.getKey(); System.out.println(key.getName()); System.out.println(key.getGroup()); System.out.println("hello job exec " + new Date()); } }
|
1.5 API测试
在HelloQuartz中书写main方法,在main方法中首先创建一个Scheduler对象,然后创建Trigger和JobDetail对象,并将Trigger对象和JobDetail对象增加到调度器中;最后启动调度器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| public static void main(String[] args) { TimeZone.setDefault(TimeZone.getTimeZone("GMT+8")); try { Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "group1") .startNow() .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(1) .repeatForever()) .endAt(new GregorianCalendar(2023, 0, 6, 14, 0, 0).getTime()) .build();
JobDetail jobDetail = JobBuilder.newJob(HelloQuartz.class) .withIdentity("job1", "group1") .build();
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start(); } catch (SchedulerException e) { throw new RuntimeException(e); } }
|
1.6 配置
在resource文件夹内创建配置文件quartz.properties,放置在classpath下,如果没有此配置则按默认配置启动。
1 2 3 4 5 6 7 8 9 10
| org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
|
配置完成后,启动程序。
2、Trigger
2.1 SimpleTrigger
以一定的时间间隔(单位是毫秒) 执行的任务。
指定起始和截止时间(时间段)
如:让Job每隔1s执行一次, 一直执行,直到结束时间。修改触发器配置如下
1 2 3 4 5 6 7 8
| Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "group1") .startNow() .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(1) .repeatForever()) .endAt(new GregorianCalendar(2023, 0, 6, 14, 0, 0).getTime()) .build();
|
指定时间间隔、执行次数
如:让Job每隔3s执行一次,执行次数不超过3次。修改触发器配置如下
1 2 3 4 5 6 7 8
| Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "group1") .startNow() .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInMinutes(3) .withRepeatCount(3)) .endAt(new GregorianCalendar(2023, 0, 6, 14, 0, 0).getTime()) .build();
|
2.2 CronTrigger[ 重点 ]
适合于更复杂的任务,它支持类型于Linux Cron的语法 (并且更强大)
如:设置触发器 每天10:00-12:00, 每隔2分钟执行一次,修改触发器配置如下
1 2 3 4
| CronTrigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "group1") .withSchedule(CronScheduleBuilder.cronSchedule("0 0/2 10-12 * * ?")) .build();
|
整理自千峰学习站