Quartz是一个由OpenSymphony组织开发的开源调度框架,广泛应用于Java应用中。它不仅支持简单的定时任务,还能处理复杂的时间调度需求,适用于企业级应用。
Quartz的核心功能包括:
- 灵活的调度策略,支持Cron表达式定义任务执行时间。
- 支持集群部署,确保任务在多节点环境中的一致性和可靠性。
- 提供丰富的API,方便开发者集成和扩展。
### Quartz的基本组成
Quartz主要由以下几个部分组成:
- Scheduler: 调度器,负责管理和触发任务。
- Job: 任务的具体实现,通常是一个实现了`org.quartz.Job`接口的类。
- Trigger: 触发器,定义了任务的执行时间和频率。
- JobStore: 存储任务和触发器的信息,可以是内存存储或数据库存储。
### 相关依赖
使用Quartz时,需要引入以下依赖:
org.quartz-scheduler quartz 2.3.2
### 示例代码
下面是一个简单的Quartz示例,展示如何创建和调度一个定时任务:
package com.example.quartz; import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; public class QuartzExample { private static SchedulerFactory schedulerFactory = new StdSchedulerFactory(); private static String JOB_GROUP_NAME = "EXAMPLE_JOBGROUP_NAME"; private static String TRIGGER_GROUP_NAME = "EXAMPLE_TRIGGERGROUP_NAME"; public static void addJob(String jobName, String jobClass, String cronExpression) { try { Scheduler scheduler = schedulerFactory.getScheduler(); JobDetail jobDetail = JobBuilder.newJob((Class extends Job>) Class.forName(jobClass)) .withIdentity(jobName, JOB_GROUP_NAME) .build(); CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression); CronTrigger trigger = TriggerBuilder.newTrigger() .withIdentity(jobName, TRIGGER_GROUP_NAME) .withSchedule(scheduleBuilder) .build(); scheduler.scheduleJob(jobDetail, trigger); if (!scheduler.isStarted()) { scheduler.start(); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } public static void main(String[] args) { addJob("exampleJob", "com.example.quartz.ExampleJob", "0 0/5 * * * ?"); } }
### Cron表达式详解
Cron表达式是一种用于配置任务执行时间的字符串格式,格式如下:
[秒] [分] [小时] [日] [月] [周] [年]
每个字段的含义及允许的值如下:
序号 | 字段 | 是否必填 | 允许的值 | 允许的通配符 |
---|---|---|---|---|
1 | 秒 | 是 | 0-59 | , - * / |
2 | 分 | 是 | 0-59 | , - * / |
3 | 小时 | 是 | 0-23 | , - * / |
4 | 日 | 是 | 1-31 | , - * ? / L W |
5 | 月 | 是 | 1-12 or JAN-DEC | , - * / |
6 | 周 | 是 | 1-7 or SUN-SAT | , - * ? / L # |
7 | 年 | 否 | empty 或 1970-2099 | , - * / |
### 常用Cron表达式示例
0 0 12 * * ? 每天12点触发 0 15 10 ? * * 每天10点15分触发 0 0/5 14 * * ? 每天下午2点到2点59分,每5分钟触发一次 0 15 10 15 * ? 每月15号上午10点15分触发 0 15 10 ? * 6L 每月最后一个周五的10点15分触发
通过以上介绍,相信你已经对Quartz有了基本的了解。更多高级功能和详细配置请参考Quartz官方文档。