【问题标题】:Java Quartz CronExpression validates wrong cron expressionJava Quartz CronExpression 验证错误的 cron 表达式
【发布时间】:2023-03-25 07:21:01
【问题描述】:

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

1 15 10 ? * *ssddddfd

当我这样做时:

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

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

注意: 包为:包org.quartz;

石英的版本是:2.2.3

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

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

【问题讨论】:

    标签: java cron quartz-scheduler


    【解决方案1】:

    这最近被作为一个错误提交:

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

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

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

    表示是否可以将指定的cron表达式解析为有效的cron表达式

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

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

    也许你想试试其他库(刚刚在谷歌上搜索过):

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

    【讨论】:

    • 我使用了 cron-utils,它抛出了 IllegalArgumentException。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2014-12-04
    • 2013-03-05
    • 2021-07-17
    相关资源
    最近更新 更多