当前位置: 首页 > 知识库问答 >
问题:

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

燕宏胜
2023-03-14

我正在使用石英调度程序来安排我的工作。我有一个错误的cron表达式:

1 15 10 ? * *ssddddfd

当我这样做的时候:

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

check CronExpressionistrue。但是当我查看表达式时,它显然是错误的。其他人也面临类似的问题吗?

注:包装为:包装组织。石英

石英的版本是:2.2.3

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

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

共有1个答案

刁跃
2023-03-14

这最近被作为错误提交:

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

你说得对,这可能出乎意料。

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

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

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

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

也许你想尝试一下其他图书馆(只需在谷歌上搜索):

  • https://github.com/mariotaku/cron-expression-lite
  • https://github.com/jmrozanec/cron-utils

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

 类似资料:
  • 我在angular中创建了一个表单,要求名称字段只包含字母数字字符和空格。为此,我使用了模式属性: 并且我有以下错误消息,我想在字符串不匹配时显示: 然而,即使字符串应该与正则表达式匹配,我仍然可以看到错误消息。有什么想法吗?

  • 问题内容: 我正在使用Quartz用Java编写调度应用程序。我正在使用CronTrigger,但是我的cron表达式在进行调度之前是先输入数据库的,并且是基于用户输入的。 捕获它们时,有什么方法可以验证cron表达式是否有效?我宁愿这样做并向用户提供适当的错误消息,而不是等到调度程序运行并且尝试创建触发器时得到ParseException。用户输入数据后可能要过几天。 问题答案: 您不能简单地创

  • null 上个月的第一天和本月的第一天 上月1日和本月第3个工作日 当前星期的星期一日期和当前星期的staturday日期。

  • 问题内容: 给定一个用户输入字符串,如何确定它在Java中是否为有效的Xpath表达式。很好奇,因为我找不到使用javax.xml.xpath库的方法。谢谢。 问题答案: 我假设您要验证语法,但是如果表达式在xml或xml架构的上下文中有效,则不要验证。您可以使用compile(..)方法,如果xpath的语法不正确,它将引发异常。

  • 用户将输入一些公式/表达式。 我想检查作为函数字符串输入的公式/表达式是否正确(根据MVEL标准)。 下面是一个有效的表达式, 以下是不正确的表达, 下面是代码片段, MVEL提供的API是否接受表达式String并在表达式不正确时返回布尔/抛出异常?

  • 主要内容:标签属性,JSF验证整数范围实例标签用于将字符串值验证为所需格式。 以下代码显示如何使用标记。 标签属性 属性 说明 pattern 格式化模式 JSF验证整数范围实例 打开 NetBeans IDE 创建一个Web工程:ValidateRegularExpression,其目录结构如下所示 - 创建以下文件代码,文件:index.xhtml 的代码内容如下所示 - 文件:result.xhtml 的代码内容如下所示 - 文件: