您现在的位置是:首页 >  云笔记 >  开发随笔 >  文章详情

Quartz2.2.3 中的JobRunShell多次重复执行问题处理

admin   2019-01-15 17:29:51   149人已围观

     最近将项目中的quartz版本升级到最新的2.2.3出现了一个很奇怪的问题,发现定时任务并不受触发器cronTrigger中的时间表达式cronExpression中规定的时间间隔控制,而是在Job启动后每秒执行一次。如下图:

这里需要注意红框中:cronExpression的写法:

<property name="cronExpression" value="* 0/2 * * * ?" />

0/2前面的那个“*” 号就是问题所在,将其改成0后重启就正常了

     就这一个小的细节花了我一个小时的时间来排查问题,希望对大家有所帮助。特此整理一下CronExpression表达式的使用和详细说明:

     格式:[秒] [分] [时] [每月的第几日] [月] [每周的第几日] [年]

字段名   必须的   允许值     允许的特殊字符
  SecondsYES     0-59 , - * /
Minutes   YES   0-59   , - * /   
  HoursYES   0-23   , - * /   
Day of month   YES   1-31   , - *  ? / L W
Month   YES   1-12 or JAN-DEC   , - * /   
Day of week   YES     1-7 or SUN-SAT, - * ? / L #   
Year   NO   empty, 1970-2099   , - * /   

字     符   含义   
  * 用于指定字段中的所有值。比如:* 在分钟中表示 每一分钟。
  ? 用于 指定日期中的某一天,或是 星期中的某一个星期。
  - 用于 指定范围。比如:10-12 在小时中表示 10 点,11 点,12 点。
  , 用于 指定额外的值。比如:MON,WED,FRI 在日期中表示 星期一, 星期三, 星期五。
  / 用于 指定增量。比如:0/15 在秒中表示 0 秒, 15 秒, 30 秒, 45 秒。5/15 在秒中表示 5 秒,20 秒,35 秒,
50 秒。
  L 在两个字段中拥有不同的含义。比如:L 在日期(Day of month)表示 某月的最后一天。在星期
(Day of week)只表示 7 或 SAT。但是,值L 在星期(Day of week)中表示 某月的最后一个星期几。
 比如:6L 表示 某月的最后一个星期五。也可以在日期(Day of month)中指定一个偏移量(从该月的最
后一天开始).比如:L-3 表示 某月的倒数第三天。
  W 用于指定工作日(星期一到星期五)比如:15W 在日期中表示 到 15 号的最近一个工作日。如果第
十五号是周六, 那么触发器的触发在 第十四号星期五。如果第十五号是星期日,触发器的触发在 第
十六号周一。如果第十五是星期二,那么它就会工作开始在 第十五号周二。然而,如果指定 1W并
且第一号是星期六,那么触发器的触发在第三号周一,因为它不会 "jump" 过一个月的日子的边界。
 L和 W 可以在日期(day-of-month)合使用,表示 月份的最后一个工作日。
  # 用于 指定月份中的第几天。比如:6#3 表示 月份的第三个星期五
(day 6 = Friday and "#3" = the 3rd one in the month)。其它的有,2#1 表示 月份第一个星期一。

4#5 表示 月份第五个星期三。注意: 如果只是指定 #5,则触发器在月份中不会触发。

cronExpression 示例

<!-- 当前是每隔3分钟运行一次 -->
<property name="cronExpression" value="0 0/3 * * * ?" />

<!-- 当前是每隔3秒运行一次 -->
<property name="cronExpression" value="0/3 * * * * ?" />

<!-- 每天3 点运行一次 -->
<property name="cronExpression" value="0 0 3 * * ?" />

<!-- 每天下午 2 点到 2 点 5 分的每一分钟运行一次 -->
<property name="cronExpression" value="0 0-5 14 * * ?" />


  由onekbit工作云笔记整理发布,转载请标记出处。  





分享到:

编辑发布时间:2019-01-15 17:29:51