java - Java Quartz CronExpression 验证错误的 cron 表达式
问题描述
我正在使用quartz-scheduler 来安排我的工作。我有一个错误的 cron 表达式:
1 15 10 ? * *ssddddfd
当我做:
String cronExpression = "1 15 10 ? * *ssdddfd";
boolean checkCronExpression = CronExpression.isValidExpression(cronExpression);
checkCronExpression
是true
。但是,当我查看表达式时,它显然是错误的。有没有其他人也遇到过类似的问题?
注:包为:包org.quartz;
石英版本是:2.2.3
请检查来自http://www.javadoc.io/doc/org.quartz-scheduler/quartz/2.2.3的 CronExpression 类
我也尝试过上课的validateExpression
方法CronExpression
,但没有成功。
解决方案
这最近被提交为一个错误:
https://github.com/quartz-scheduler/quartz/issues/254
你是对的,这可能是出乎意料的。
然而,非常挑剔的人可能会争辩说各州的JavaDocisValidCronExpression
指示是否可以将指定的 cron 表达式解析为有效的 cron 表达式
实际上,尽管表达式本身无效,但您提供的表达式可以解析为有效的。CronExpression
基本上你从调用中得到的保证CronExpression.isValidCronExpression(expression)
是,你可以安全地调用new CronExpression(expression)
而不用担心ParseException
会被抛出。但是,作为java.text.ParseException
已检查的异常,这是毫无意义的。
总之,当前的实现CronExpression
似乎有点过于宽松。
也许您想尝试一下其他库(刚刚在谷歌上搜索过):
但是,如果您想稍后将表达式与石英一起使用,您最好的选择是继续使用石英验证,因为对其他库有效的模式可能对石英无效,反之亦然。例如,quartz 的源代码指出,目前不支持同时具有“星期几”和“星期几”的模式,尽管这通常由 cron 表达式支持。
推荐阅读
- vb.net - 如何将字符串输入添加到数组中?
- numpy - 用另一个数组中的值填充维度的有效方法
- javascript - ul & li - 具有多列和绝对位置的动态宽度
- awilix - Awilix 无法解决选项
- angular - 如何仅在参数或查询参数的一个键值对更改时触发订阅
- git - 什么可以阻止 URL 中的基本身份验证凭据起作用?
- allure - Allure 和 Jira X-Ray 集成
- python - 从具有正确打印格式的字典中迭代
- tensorflow - TensorFlow 数据集映射中的条件与“基本”Python 行为不一致
- ajax - WordPress 上传 blob 文件