Quartz CronExpression 获取所有表达式参数信息

2024-02-09

跟随我的上一个问题 https://stackoverflow.com/questions/9699323/java-quartz-get-all-details-from-a-scheduled-job/9699495#comment12330155_9699495,我继承了 CronExpression 并将 getSet 更改为公共。这个方法获取 int 类型,并且我有一个包含 cron 表达式的字符串。如何获取有关此表达式的信息(小时\天\等)?我需要将什么传递给 getSet 方法?或者也许我应该使用另一种方法?这对我来说非常不清楚。


问题在于CronExpression http://www.quartz-scheduler.org/api/2.1.0/org/quartz/CronExpression.html即使它这样说:

为类 UNIX 的 cron 表达式提供解析器和求值器。

API 晦涩难懂,隐藏在下面protected方法。到目前为止,它还不是一个通用的 CRON 表达式解析器。然而,通过一些调整,您可以轻松利用解析逻辑:

class MyCronExpression extends CronExpression {

    public MyCronExpression(String cronExpression) throws ParseException
    {
        super(cronExpression);
    }

    public TreeSet<Integer> getSeconds()
    {
        return super.getSet(CronExpression.SECOND);
    }

    public TreeSet<Integer> getMinutes()
    {
        return super.getSet(CronExpression.MINUTE);
    }

    public TreeSet<Integer> getHours()
    {
        return super.getSet(CronExpression.HOUR);
    }

    //...

}

Usage:

final MyCronExpression cronExpression = new MyCronExpression("0 30 9,12,15 * * ?");
System.out.println(cronExpression.getSeconds());        //0
System.out.println(cronExpression.getMinutes());        //30
System.out.println(cronExpression.getHours());      //9, 12, 15

您可能会想使用正则表达式手动解析 CRON 表达式...这是来自的正则表达式job_scheduling_data_2_0.xsd http://www.quartz-scheduler.org/xml/job_scheduling_data_2_0.xsd石英架构:

(((([0-9]|[0-5][0-9]),)*([0-9]|[0-5][0-9]))|(([\*]|[0-9]|[0-5][0-9])(/|-)([0-9]|[0-5][0-9]))|([\?])|([\*]))[\s](((([0-9]|[0-5][0-9]),)*([0-9]|[0-5][0-9]))|(([\*]|[0-9]|[0-5][0-9])(/|-)([0-9]|[0-5][0-9]))|([\?])|([\*]))[\s](((([0-9]|[0-1][0-9]|[2][0-3]),)*([0-9]|[0-1][0-9]|[2][0-3]))|(([\*]|[0-9]|[0-1][0-9]|[2][0-3])(/|-)([0-9]|[0-1][0-9]|[2][0-3]))|([\?])|([\*]))[\s](((([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1]),)*([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(C)?)|(([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(/|-)([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(C)?)|(L(-[0-9])?)|(L(-[1-2][0-9])?)|(L(-[3][0-1])?)|(LW)|([1-9]W)|([1-3][0-9]W)|([\?])|([\*]))[\s](((([1-9]|0[1-9]|1[0-2]),)*([1-9]|0[1-9]|1[0-2]))|(([1-9]|0[1-9]|1[0-2])(/|-)([1-9]|0[1-9]|1[0-2]))|(((JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC),)*(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))|((JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(-|/)(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))|([\?])|([\*]))[\s]((([1-7],)*([1-7]))|([1-7](/|-)([1-7]))|(((MON|TUE|WED|THU|FRI|SAT|SUN),)*(MON|TUE|WED|THU|FRI|SAT|SUN)(C)?)|((MON|TUE|WED|THU|FRI|SAT|SUN)(-|/)(MON|TUE|WED|THU|FRI|SAT|SUN)(C)?)|(([1-7]|(MON|TUE|WED|THU|FRI|SAT|SUN))?(L|LW)?)|(([1-7]|MON|TUE|WED|THU|FRI|SAT|SUN)#([1-7])?)|([\?])|([\*]))([\s]?(([\*])?|(19[7-9][0-9])|(20[0-9][0-9]))?| (((19[7-9][0-9])|(20[0-9][0-9]))(-|/)((19[7-9][0-9])|(20[0-9][0-9])))?| ((((19[7-9][0-9])|(20[0-9][0-9])),)*((19[7-9][0-9])|(20[0-9][0-9])))?)

或者也许有人知道更好的 Java 通用 CRON 表达式解析器?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Quartz CronExpression 获取所有表达式参数信息 的相关文章

随机推荐