Java Quartz CronExpression 验证错误的 cron 表达式

标签 java cron quartz-scheduler

我正在使用 quartz-scheduler 来安排我的工作。我有一个错误的 cron 表达式:

1 15 10 ? * *ssddddfd

当我这样做时:

String cronExpression = "1 15 10 ? * *ssdddfd";
boolean checkCronExpression = CronExpression.isValidExpression(cronExpression);

checkCronExpressiontrue。然而,当我看这个表达时,它显然是错误的。有没有其他人也遇到过类似的问题?

注意: 包是:package org.quartz;

quartz 版本为:2.2.3

请检查 http://www.javadoc.io/doc/org.quartz-scheduler/quartz/2.2.3 中的 CronExpression 类

我还尝试了 CronExpression 类的 validateExpression 方法,但没有成功。

最佳答案

这最近被记录为一个错误:

https://github.com/quartz-scheduler/quartz/issues/254

你是对的,这可能出乎意料。

然而,非常挑剔的人可能会争辩说 JavaDoc of isValidCronExpression

Indicates whether the specified cron expression can be parsed into a valid cron expression

实际上,您提供的表达式可以解析为有效的CronExpression,尽管表达式本身无效。基本上,您通过调用 CronExpression.isValidCronExpression(expression) 获得的保证是,您可以安全地调用 new CronExpression(expression) 而不必担心 ParseException 将被抛出。然而,由于 java.text.ParseException 是一个已检查的异常,这是毫无意义的。

总而言之,CronExpression 的当前实现似乎有点太宽松了。

也许你想尝试一下其他库(只是在 google 上搜索过):

但是,如果您稍后想将表达式与 quartz 一起使用,您最好的选择是继续使用 quartz 验证,因为对其他库有效的模式可能对 quartz 无效,反之亦然。例如,quartz 的源代码指出,目前不支持同时具有“星期几”和“月份日期”的模式,尽管这通常受到 cron 表达式的支持。

关于Java Quartz CronExpression 验证错误的 cron 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52252273/

相关文章:

java - 在 Java 中重载时是否可以限制泛型类型而不进行强制转换?

java - 通过谓词限制流

shell - 如何将 cron 转换为守护进程

java - 一种根据给定时间表运行任务的方法

java - 如何使用 Java 中的 Quartz Scheduler 框架运行 cron 作业?

java - 使用 SWIG 返回一个 java 对象数组

java - 为什么由返回另一个静态变量的方法调用初始化的静态变量仍然为空?

php - 使用 Crontab 运行 PHP 脚本 (Plesk/CentOS6)

mysql - 如何在 cron 作业中运行复杂的 mysql 查询?

grails - 在Grails配置中,如何在其他环境中访问变量?