Quartz时间规则

*  *  *    *   *    *    *
秒 分 小时 一月  月份  星期  年
           哪天



所有星号对应的段位置,都可以出现后面的符号(, - * /)
(? / L C)这些符号可以出现在"一月哪天"和"星期"段位置
(w)只能出现在"一月哪天"段位置
(#)只能出现在"星期"段位置

解释符号代表的意思:
* 代表任意合法的字段
  0 * 17 * * ?  :表示在每天的5 PM 到 5:59之间的每一分钟启动scheduler
 
? 表示没值被指定
  如果同时指定"一月哪天"和"星期",可能两者对应不起来
  0 0,15,30,45 * * * ? :表示每刻钟启动scheduler
  所以推荐用法是其中一个指定值,另一个用?指定

/ 表示时间的增量
  0 0/15 * * * ? :表示每刻钟启动scheduler
 
- 表示值的范围
  0 45 3-8 ? * *
 
L 如果用在"一月哪天"段上,表示一个月的最后一天;如果用在"星期"段上。表示一个星期的最后一天(星期六)
  0 0 8 L * ? :表示每个月最后一天的8点启动scheduler
 
W 表示最靠近给定时间的一天,(必须是星期一到星期五)

# 例如 6#3表示一个月的第三个星期五

 

 

 

表达式用" "分隔为7个部分,每部分含义如下

Field Name Mandatory? Allowed Values Allowed Special Characters
Seconds YES 0-59 , - * /
Minutes YES 0-59 , - * /
Hours YES 0-23 , - * /
Day of month YES 1-31 , - * ? / L W C
Month YES 1-12 or JAN-DEC , - * /
Day of week YES 1-7 or SUN-SAT , - * ? / L C #
Year NO empty, 1970-2099 , - * /



补充说明:
'*'代表 '任何值'
'?'也代表 '任何值', 但只用于 Day-of-month 和 Day-of-Week, 当其中一个设置了条件时,另外一个就要用'?' 来表示 '任何值'
'-'用来表示范围, 比如 Day-of-month 5-10 代表 5号到10号
','用来添加附加的参数,比如 Hours 4,14 代表 上午4点和下午两点
'/'用来代表增量以用来循环,比如 Hours 2/6 代表 2点,8点,下午2点,下午8点
'L'用于 Day-of-month 和 Day-of-Week, 代表最后1天, 在Day-of-month中只用'L'就可以,在Day-of-week中用 'nL' 来代表是最后一个星期n
'W'用于 Day-of-month, 代表最近工作日,比如 '15W', 如果15号那天是周六则取14号周五,如果是周日则取16号周一,其他情况不变
'LW' 代表当月最后一个工作日
'#'用于 Day-of-Week, 'n#m'用于代表当月第m个 "周n"(根据n在week中的定义确定)
'C'似乎目前还没实现完全,暂不解释(自己也还不是很清楚,先看文档吧)

项目实例:
              second minute hours dayOfMonth month dayOfWeek year
每月         0            0           6               ?                   *                6#3            ?
每周         59            59          18             ?                   *                 1                ?
自定义     28          47           9              30                  7                 ?             2006
每月:每个月的第三个星期五的上午6:00:00 触发
每周:每周的星期日的下午18:59:59 触发
自定义:2006年7月30日上午9:47:28 触发

所有星号对应的段位置,都可以出现后面的符号(, - * /)
(? / L C)这些符号可以出现在"一月哪天"和"星期"段位置
(w)只能出现在"一月哪天"段位置
(#)只能出现在"星期"段位置

解释符号代表的意思:
* 代表任意合法的字段
0 * 17 * * ? :表示在每天的5 PM 到 5:59之间的每一分钟启动scheduler

? 表示没值被指定
如果同时指定"一月哪天"和"星期",可能两者对应不起来
0 0,15,30,45 * * * ? :表示每刻钟启动scheduler
所以推荐用法是其中一个指定值,另一个用?指定

/ 表示时间的增量
0 0/15 * * * ? :表示每刻钟启动scheduler

- 表示值的范围
0 45 3-8 ? * *

L 如果用在"一月哪天"段上,表示一个月的最后一天;如果用在"星期"段上。表示一个星期的最后一天(星期六)
0 0 8 L * ? :表示每个月最后一天的8点启动scheduler

W 表示最靠近给定时间的一天,(必须是星期一到星期五)

# 例如 6#3表示一个月的第三个星期五

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Quartz框架来配置时间Quartz是一个功能强大的开源作业调度库,可以让您轻松地定义和调度任务。 要配置时间,首先需要创建一个Trigger对象。Trigger定义了作业何时触发的规则。以下是一些常用的Trigger配置选项: 1. SimpleTrigger:按照指定的时间间隔执行一次或多次作业。 2. CronTrigger:使用Cron表达式定义作业的执行时间表。Cron表达式可以非常灵活地定制作业触发规则,例如每天特定时间执行、每周特定天执行等。 3. CalendarIntervalTrigger:按照指定的日历间隔执行作业。可以指定作业在每天、每周或者每月的特定时间段内执行。 在创建Trigger对象之后,您还需要将其与作业关联起来。作业定义了要执行的任务逻辑。 以下是一个使用Quartz配置时间的示例代码: ```java import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; public class QuartzScheduler { public static void main(String[] args) throws SchedulerException { // 创建一个JobDetail对象,定义要执行的任务逻辑 JobDetail job = JobBuilder.newJob(MyJob.class) .withIdentity("myJob", "group1") .build(); // 创建一个Trigger对象,定义作业触发规则 Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myTrigger", "group1") .startNow() .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) // 每隔10秒执行一次 .repeatForever()) .build(); // 创建Scheduler对象,用于管理作业调度 Scheduler scheduler = new StdSchedulerFactory().getScheduler(); scheduler.start(); scheduler.scheduleJob(job, trigger); } } ``` 在上述示例中,我们使用了SimpleTrigger来定义作业的触发规则,每隔10秒执行一次。您可以根据自己的需求选择合适的Trigger配置选项来配置时间

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值