一、组成部分
(1)任务:JobDetail
(2)触发器:Trigger,包括SimpleTrigger和CronTrigger
(3)调度器:Scheduler (作用:连接任务和触发器)
二、Quartz Maven项目搭建
1、导入依赖
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.0</version>
</dependency>
2、新建一个Job任务类
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("现在时间是:"+new SimpleDateFormat().format(new Date()));
}
}
3、创建Scheduler,执行任务
(1)间隔一段时间执行任务
SimpleTrigger可以实现在一个指定时间段内执行一次作业任务或一个时间段内多次执行作业任务。
public class SimpleTrigger {
public static void simpleTriggerPrint() throws Exception {
// 1、创建任务
JobDetail job=new JobDetailImpl("myjob","group1",MyJob.class);
// 2、创建一个触发器
Trigger simpleTrigger=new SimpleTriggerImpl("simpleTrigger","group1",10,1000);
// 3、创建调度者工厂
SchedulerFactory sfc=new StdSchedulerFactory();
// 4、创建一个调度者
Scheduler scheduler = sfc.getScheduler();
// 5、注册并进行调度
scheduler.scheduleJob(job,simpleTrigger);
// 6、启动调度
scheduler.start();
//休眠
Thread.sleep(20000);
// 7、关闭调度
scheduler.shutdown();
}
}
(2)定时执行任务
CronTrigger允许用户更精准地控制任务的运行日期和时间,而不仅仅是定义工作的频度。
CronTrigger通过Cron表达式定义准确的运行时间点。
public class CronTrigger {
public static void cronTriggerPrint() throws Exception {
// 1、创建一个任务
JobDetail job = new JobDetailImpl("myJob", "group1", MyJob.class);
// 2、创建Cron触发器
Trigger cronTrig = new CronTriggerImpl("cronTrig", "group1","0 15 13 20 12 ? *");
// 3、创建调度者工厂
SchedulerFactory sfc = new StdSchedulerFactory();
// 4、创建一个调度者
Scheduler scheduler = sfc.getScheduler();
// 5、注册并进行调度
scheduler.scheduleJob(job, cronTrig);
// 6、启动调度
scheduler.start();
// 休眠10s
Thread.sleep(10000);
// 7、关闭调度
scheduler.shutdown();
}
}
相关知识:
Cron表达式的格式:
[秒] [分] [小时] [日] [月] [周] [年]
例子:
(1)0 0 2 1 * ? * 表示在每月的1日的凌晨2点调整任务
(2)0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业
(3)0 15 10 ? 6L 2002-2006 表示2002-2006年的每个月的最后一个星期五上午10:15执行作
(4)0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
(5)0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
(6)0 0 12 ? * WED 表示每个星期三中午12点
在线生成Cron表达式的工具:http://cron.qqe2.com/
4、测试
public class MyTest {
public static void main(String[] args) throws Exception {
//SimpleTrigger.simpleTriggerPrint();
CronTrigger.cronTriggerPrint();
}
}