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

8

我正在使用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.3CronExpression 类。

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

1个回答

10

最近提交了一个bug:

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

你是对的,这可能是意料之外的。

然而,非常挑剔的人可以争辩说isValidCronExpression的JavaDoc规定:

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

实际上,您提供的表达式可以被分析为有效的CronExpression尽管表达式本身无效。基本上,从调用CronExpression.isValidCronExpression(expression)获得的保证是,您可以安全地调用new CronExpression(expression)而不必担心会抛出ParseException。但是由于java.text.ParseException是一种受检异常,因此这相当无意义。

总之,当前的CronExpression实现似乎过于宽容了。

也许您想尝试其他库(只需在Google上搜索):

如果你想后来在quartz中使用这个表达式,最好的选择是保持quartz的验证方式,因为对于其他库有效的模式可能对quartz无效,反之亦然。例如,quartz的源代码指出,目前不支持同时包含“星期几”和“月中某一天”的模式,尽管这通常是cron表达式所支持的。


我使用了cron-utils,但它抛出了一个IllegalArgumentException异常。 - Sadiksha Gautam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接