quartz中CronTrigger的使用说明

CronTrigger详解
本文详细介绍了CronTrigger类,这是一种用于定义基于时间的任务调度的触发器。通过使用类似Unix 'cron' 的表达式来指定任务执行的时间点,例如每天上午10:15执行等。此外还介绍了创建CronTrigger的不同构造函数及其参数。
public class CronTrigger extends Trigger

 

A concrete Trigger that is used to fire a JobDetail at given moments in time, defined with Unix 'cron-like' definitions.

For those unfamiliar with "cron", this means being able to create a firing schedule such as: "At 8:00am every Monday through Friday" or "At 1:30am every last Friday of the month".

The format of a "Cron-Expression" string is documented on the CronExpression class.

Here are some full examples:

Expression Meaning
"0 0 12 * * ?"  Fire at 12pm (noon) every day
"0 15 10 ? * *"  Fire at 10:15am every day
"0 15 10 * * ?"  Fire at 10:15am every day
"0 15 10 * * ? *"  Fire at 10:15am every day
"0 15 10 * * ? 2005"  Fire at 10:15am every day during the year 2005
"0 * 14 * * ?"  Fire every minute starting at 2pm and ending at 2:59pm, every day
"0 0/5 14 * * ?"  Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day
"0 0/5 14,18 * * ?"  Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day
"0 0-5 14 * * ?"  Fire every minute starting at 2pm and ending at 2:05pm, every day
"0 10,44 14 ? 3 WED"  Fire at 2:10pm and at 2:44pm every Wednesday in the month of March.
"0 15 10 ? * MON-FRI"  Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday
"0 15 10 15 * ?"  Fire at 10:15am on the 15th day of every month
"0 15 10 L * ?"  Fire at 10:15am on the last day of every month
"0 15 10 ? * 6L"  Fire at 10:15am on the last Friday of every month
"0 15 10 ? * 6L"  Fire at 10:15am on the last Friday of every month
"0 15 10 ? * 6L 2002-2005"  Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005
"0 15 10 ? * 6#3"  Fire at 10:15am on the third Friday of every month

Pay attention to the effects of '?' and '*' in the day-of-week and day-of-month fields!

NOTES:

  • Support for specifying both a day-of-week and a day-of-month value is not complete (you'll need to use the '?' character in on of these fields).
  • Be careful when setting fire times between mid-night and 1:00 AM - "daylight savings" can cause a skip or a repeat depending on whether the time moves back or jumps forward.

==========================

CronTrigger

public CronTrigger()

Create a CronTrigger with no settings.

The start-time will also be set to the current time, and the time zone will be set the the system's default time zone.

 


CronTrigger

public CronTrigger(String name,
                   String group)

Create a CronTrigger with the given name and group.

The start-time will also be set to the current time, and the time zone will be set the the system's default time zone.

 


CronTrigger

public CronTrigger(String name,
                   String group,
                   String cronExpression)
            throws ParseException

Create a CronTrigger with the given name, group and expression.

The start-time will also be set to the current time, and the time zone will be set the the system's default time zone.

 


CronTrigger

public CronTrigger(String name,
                   String group,
                   String jobName,
                   String jobGroup)

Create a CronTrigger with the given name and group, and associated with the identified JobDetail.

The start-time will also be set to the current time, and the time zone will be set the the system's default time zone.

 


CronTrigger

public CronTrigger(String name,
                   String group,
                   String jobName,
                   String jobGroup,
                   String cronExpression)
            throws ParseException

Create a CronTrigger with the given name and group, associated with the identified JobDetail, and with the given "cron" expression.

The start-time will also be set to the current time, and the time zone will be set the the system's default time zone.

 


CronTrigger

public CronTrigger(String name,
                   String group,
                   String jobName,
                   String jobGroup,
                   String cronExpression,
                   TimeZone timeZone)
            throws ParseException

Create a CronTrigger with the given name and group, associated with the identified JobDetail, and with the given "cron" expression resolved with respect to the TimeZone.

 


CronTrigger

public CronTrigger(String name,
                   String group,
                   String jobName,
                   String jobGroup,
                   Date startTime,
                   Date endTime,
                   String cronExpression)
            throws ParseException

Create a CronTrigger that will occur at the given time, until the given end time.

If null, the start-time will also be set to the current time, the time zone will be set the the system's default.

 

Parameters:
startTime - A Date set to the time for the Trigger to fire.
endTime - A Date set to the time for the Trigger to quit repeat firing.

CronTrigger

public CronTrigger(String name,
                   String group,
                   String jobName,
                   String jobGroup,
                   Date startTime,
                   Date endTime,
                   String cronExpression,
                   TimeZone timeZone)
            throws ParseException

Create a CronTrigger with fire time dictated by the cronExpression resolved with respect to the specified timeZone occuring from the startTime until the given endTime.

If null, the start-time will also be set to the current time. If null, the time zone will be set to the system's default.

 

Parameters:
name - of the Trigger
group - of the Trigger
startTime - A Date set to the earliest time for the Trigger to start firing.
endTime - A Date set to the time for the Trigger to quit repeat firing.
Throws:
ParseException - if the cronExpression is invalid.
Quartz 框架中,`CronTrigger` 是用于定义基于 cron 表达式触发任务的机制。`CronTrigger` 提供了灵活的时间调度方式,允许开发者通过 cron 表达式精确控制任务的执行时间。 `CronTrigger` 的核心配置主要通过 `CronScheduleBuilder` 来完成,该类提供了多种方法用于构建 cron 调度策略。常见的配置包括指定 cron 表达式、时区、是否可错过触发(misfire handling)等。以下是一个典型的 `CronTrigger` 构建示例: ```java CronTrigger cronTrigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "group1") .withSchedule(CronScheduleBuilder.cronSchedule("0 0/5 * * * ?")) .build(); ``` 在上述代码中,`CronScheduleBuilder.cronSchedule("0 0/5 * * * ?")` 指定了一个每 5 分钟执行一次的任务调度规则。此 cron 表达式由六个或七个字段组成(可选年份),分别表示秒、分、小时、日、月、周几和年(可选)[^2]。 此外,`CronTrigger` 还支持配置时区,以确保任务在指定的地理区域时间执行。例如: ```java CronScheduleBuilder.cronSchedule(TimeZone.getTimeZone("America/New_York"), "0 0/5 * * * ?") ``` 对于 misfire 情况的处理,Quartz 提供了多种策略,如 `MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY`、`MISFIRE_INSTRUCTION_FIRE_ONCE_NOW` 等。这些策略可以通过 `withMisfireHandlingInstruction` 方法应用到 `CronTrigger` 上。 ### Cron 表达式语法 Quartz 的 cron 表达式语法支持多个特殊字符,包括星号(*)、问号(?)、连字符(-)、斜杠(/)、逗号(,)和 L、W、# 等特定字符。这些特殊字符允许定义复杂的调度逻辑,例如: - 星号(*)表示任意值。 - 问号(?)表示不指定值,通常用于日和周几字段中,以避免冲突。 - 连字符(-)定义一个值的范围。 - 斜杠(/)定义递增的步长。 - 逗号(,)列出多个值。 - L 表示最后一天或最后一个星期几。 - W 表示最近的工作日。 - # 用于指定第几个星期几。 例如,表达式 `0 0 12 ? * SUN#2` 表示“每个月的第二个星期日的中午 12:00”执行任务。 ### 在线 Cron 表达式生成器 为了简化 cron 表达式的编写过程,可以使用在线 cron 表达式生成器工具。这些工具通常提供图形界面,让用户选择时间参数,然后自动生成相应的 cron 表达式。这有助于减少手动编写时可能出现的错误,并提高开发效率。 ### Quartz 与 Spring Boot 整合 当 Quartz 与 Spring Boot 整合时,可以通过配置类来定义 `CronTrigger`。在 Spring Boot 中,通常会创建一个配置类,使用 `@Bean` 注解来声明 `CronTrigger` 实例。例如: ```java @Configuration public class QuartzConfig { @Bean public CronTrigger cronTrigger(JobDetail jobDetail) { return TriggerBuilder.newTrigger() .forJob(jobDetail) .withIdentity("cronTrigger", "group1") .withSchedule(CronScheduleBuilder.cronSchedule("0 0/5 * * * ?")) .build(); } } ``` 在上述配置中,`jobDetail` 是一个已经定义好的 `JobDetail` 对象,它指定了要执行的任务类。通过这种方式,可以将 `CronTrigger` 与具体的任务关联起来,并在 Spring Boot 应用程序启动时自动注册到 Quartz 调度器中。 ### 数据库支持 Quartz 支持将任务和触发器的信息存储在数据库中,以便在应用程序重启后仍然能够保留任务状态。为此,需要预先创建一系列数据库表,这些表共同支撑了 Quartz 的任务调度功能,既支持单机调度,也支持分布式集群环境。[^3] 在 Spring Boot 项目中,除了需要添加 Quartz 的 Maven 依赖外,还需要配置数据源和 Quartz 的相关属性。通常会在 `application.properties` 文件中配置数据源信息,并在 `quartz.properties` 文件中设置 Quartz 的调度器参数。例如: ```properties # application.properties spring.datasource.url=jdbc:mysql://localhost:3306/quartz_db spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # quartz.properties org.quartz.scheduler.instanceName=MyScheduler org.quartz.threadPool.threadCount=10 org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.dataSource=myDS org.quartz.jobStore.tablePrefix=QRTZ_ org.quartz.dataSource.myDS.driver=com.mysql.cj.jdbc.Driver org.quartz.dataSource.myDS.URL=jdbc:mysql://localhost:3306/quartz_db org.quartz.dataSource.myDS.user=root org.quartz.dataSource.myDS.password=root org.quartz.dataSource.myDS.maxConnections=5 ``` 通过上述配置,Quartz使用 MySQL 数据库来持久化任务和触发器信息,从而实现任务状态的持久化存储。 ### 示例输出日志 当 Quartz 调度器成功启动并开始执行任务时,控制台会输出类似以下的日志信息: ``` [main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 2.3.0 1633149326723 任务执行。。。 Sat Oct 02 12:35:26 CST 2021 Sat Oct 02 12:36:26 CST 2021 [main] INFO org.quartz.core.QuartzScheduler - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. ``` 这些日志信息表明调度器已经正确启动,并且任务正在按照预定的时间表执行。 ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值