Quartz是要做定时任务的调度,设置好触发的时间规则,以及相应的任务(Job)即可
导入依赖
<!--Quartz定时框架--> <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency>
定义Job
import org.quartz.*;
import java.util.Date;
//job任务
public class HelloJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
JobDetail jobDetail = jobExecutionContext.getJobDetail();
JobKey key = jobDetail.getKey();
String name = key.getName();
String group = key.getGroup();
System.out.println(name + ":" + group);
System.out.println("hello job exec:" + new Date());
System.out.println("---------------------");
}
}
测试
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.util.GregorianCalendar;
public class HelloQuartz {
public static void main(String[] args) throws SchedulerException {
//quartz API
//1.调度器Scheduler
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
//2.触发器;描述规则
SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
.startNow()
//详细的响应规则
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).withRepeatCount(10))
.endAt(new GregorianCalendar(2022, 3, 20, 11, 25, 30).getTime())
.build();
//3.JobDetail
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1").build();
//4.将JobDetail和触发器增加到调度器中
scheduler.scheduleJob(jobDetail, trigger);
//5.启动,调度器开始工作
scheduler.start();
}
}
运行结果
可以使用配置文件,自定义配置规则
# 指定调度器名称,非实现类 org.quartz.scheduler.instanceName=DefaultQuartzScheduler # 指定线程池实现类 org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool # 线程池线程数量 org.quartz.threadPool.threadCount=10 # 优先级,默认5 org.quartz.threadPool.threadPriority=5 # 非持久化job org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore
触发器CronTrigger
用这个可以在线练习测试cron表达式
quartz/Cron/Crontab表达式在线生成工具-BeJSON.com
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.util.GregorianCalendar;
public class CronQuartz {
public static void main(String[] args) throws SchedulerException {
//quartz API
//1.调度器Scheduler
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
//2.触发器;描述规则
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
//详细的响应规则
.withSchedule(CronScheduleBuilder.cronSchedule("*/2 * * 22 2 ?"))
.build();
//3.JobDetail
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1").build();
//4.将JobDetail和触发器增加到调度器中
scheduler.scheduleJob(jobDetail, trigger);
//5.启动,调度器开始工作
scheduler.start();
}
}