Я использую 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
Пожалуйста, проверьте класс CronExpression из http://www.javadoc.io/doc/org.quartz-scheduler/quartz/2.2.3
Я также безуспешно пробовал метод validateExpression
класса CronExpression
.
Это недавно было зарегистрировано как ошибка:
https://github.com/quartz-scheduler/quartz/issues/254
И вы правы, это, наверное, неожиданно.
Однако, будучи очень придирчивым, можно утверждать, что JavaDoc из 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):
Но если вы хотите использовать выражение с кварцем позже, лучшим вариантом будет остаться с проверкой кварца, поскольку шаблоны, действительные для других библиотек, могут быть недействительными для кварца и наоборот. В исходном коде кварца, например, указано, что шаблоны с «днем недели» и «днем месяца» в настоящее время не поддерживаются, хотя в целом это поддерживается выражениями cron.
Я использовал cron-utils, и он выдает исключение IllegalArgumentException.