简介
Quartz是 OpenSymphony 开源组织在 Job scheduling 领域的开源项目,是由 java 开发的一个开源的任务日程管理系统。
Quartz 是一个功能丰富的开源作业调度库,几乎可以集成到任何 Java 应用程序中——从最小的独立应用程序到最大的电子商务系统。
Quartz 可用于创建简单或复杂的调度,以执行数十、数百甚至数万个作业;任务被定义为标准 Java 组件的作业,这些组件几乎可以执行任何您可以对其编程来执行的操作。
Quartz Scheduler 包括许多企业级特性,例如对 JTA 事务和集群的支持。
简单Demo
<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>
任务类:
public class JobDemo implements Job {
public void execute(JobExecutionContext jobExecutionContext) {
JobDetail detail = jobExecutionContext.getJobDetail();
String name = detail.getJobDataMap().getString("name");
System.out.println("my job name is " + name + " at " + new Date());
}
}
生成任务细节对象、触发器对象 和 调度对象的类:(我将其封装在了函数内)
生成任务细节对象:
public JobDetail createJobDetail() {
return JobBuilder.newJob(jobDemo.class) // 这里传的是实际工作类
//定义name和group
.withIdentity("jobName", "group1")
//job需要传递的内容
.usingJobData("name", value)
.build();
}
生成触发器对象:
这里的 withSchedule() 可以传的参数有很多
public Trigger createSimpleTrigger() {
return TriggerBuilder.newTrigger().withIdentity("triggerName", "group1")
//加入 scheduler之后立刻执行
.startNow()
//定时 ,每隔5秒钟执行一次
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5)
//重复执行
.repeatForever())
.build();
}
生成调度对象:
public Scheduler createScheduler(JobDetail jobDetail, Trigger trigger) {
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
return scheduler;
} catch (SchedulerException e) {
e.printStackTrace();
System.out.println("---------error--------");
return null;
}
}
cron 规则
spring4以上的版本中,cron表达式包含6个参数:
[秒] [分] [时] [日期] [月] [星期]
还支持几个常用的特殊符号:
*:表示任何时间触发任务
,:表示指定的时间触发任务
-:表示一段时间内触发任务
/:表示从哪一个时刻开始,每隔多长时间触发一次任务。
?:表示用于月中的天和周中的天两个子表达式,表示不指定值。
cron表达式参数具体含义:
秒,取值范围:0-59,支持*
、,
、-
、/
。
分,取值范围:0-59,支持*
、,
、-
、/
。
时,取值范围:0-23,支持*
、,
、-
、/
。
日期,取值范围:1-31,支持*
、,
、-
、/
。比秒多了?
,表示如果指定的星期触发了,则配置的日期变成无效。
月,取值范围:1-12,支持*
、,
、-
、/
。
星期,取值范围:1~7,1代表星期天,6代表星期六,其他的以此类推。支持*
、,
、-
、/
、?
。比秒多了?
,表示如果指定的日期触发了,则配置的星期变成无效。
常见 cron 表达式使用举例:
0 0 0 1 * ? 每月1号零点执行
0 0 2 * * ? 每天凌晨2点执行
0 0 2 * * ? 每天凌晨2点执行
0 0/5 11 * * ? 每天11点-11点55分,每隔5分钟执行一次
0 0 18 ? * WED 每周三下午6点执行
参考
- Quartz框架介绍_我是你妹她哥的博客-CSDN博客_quartz
- 定时任务的10种写法,长见识了_Java小果的博客-CSDN博客_定时任务