转换jqcron cron格式以支持Quartz cron格式

时间:2015-11-17 13:50:17

标签: javascript jquery cron

我正在使用jqCron生成cron表达式来安排我的工作。每天9:30的示例cron表达是“30 9 * * *”
相同表达式的Quartz支持的cron格式为“0 30 9 * *?”

是否有任何js实用程序可用于转换jqCron生成的cron以支持Quartz格式的cron,反之亦然。

Support for Quartz plugin

在这个例子中,jqCron js内部方法被覆盖以支持Quartz格式。我们可以不用像js实用函数那样覆盖jqCron js吗

由于

2 个答案:

答案 0 :(得分:1)

浏览以下链接。我使用了这个API,它与石英兼容。

https://github.com/felixruponen/jquery-cron

有些人可以从Git Repository上面下载源代码,并在他们的项目中包含CSS文件和jquery-cron-min.js文件。下面的代码片段对任何人来说都是一个好的开始。

$('#schedulerWidget').cron({
            initial: "0 0/1 * * * ?",
            onChange: function() {
                cronValue = $('#schedulerWidget').cron("value");
                console.log('Cron Updated Value: '+cronValue);
                $("#schedulerWidgetSelctedValue").text(cronValue);
            },
            customValues: {
                "5 Minutes" : "0 0/5 * * * ?"
            }
    });

答案 1 :(得分:1)

在使用以下工具https://github.com/jmrozanec/cron-utils

调度Quartz作业之前,我使用了后台转换

以及以下助手类

public class CronTimeDefinition {

public static final String CRON_SCHEME_MANUAL = "manual";
private boolean            isManual           = false;
private boolean            isCorrect          = false;
private String             unixDefinition;

public CronTimeDefinition(String definition) {

    if (definition.equals(CRON_SCHEME_MANUAL)) {
        isCorrect = true;
        isManual = true;
    } else {
        CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(CronType.UNIX);
        CronValidator oValidator = new CronValidator(cronDefinition);

        if (oValidator.isValid(definition)) {
            unixDefinition = definition;
            isCorrect = true;
            isManual = false;
        }
    }
}

public boolean isManual() {
    return isManual;
}

public static boolean isManual(String crondef) {
    return crondef.contains(CRON_SCHEME_MANUAL);
}

public boolean isCorrect() {
    return isCorrect;
}

public String getUnixDefinition() {
    return unixDefinition;
}

public String getQuartzDefinition() {
    return cronConversion(unixDefinition, CronType.UNIX, CronType.QUARTZ);
}

/**
 * Cron format converter
 *
 * @param a_cronStrin gcron string to convert
 * @param a_from input type
 * @param a_to : output type
 *
 * @return converted format cron
 */
private static String cronConversion(String a_cronString, CronType a_from, CronType a_to) {
    String result = "";

    if ((a_from == CronType.UNIX) && (a_to == CronType.QUARTZ)) {
        String[] cronSplited = a_cronString.split("\\s+");
        if ("*".equals(cronSplited[2])) {
            cronSplited[2] = "?";
        } else if ("*".equals(cronSplited[4])) {
            cronSplited[4] = "?";
        }
        String[] days = cronSplited[4].split("[,-\\-]+");
        for (int i = 0; i < days.length; i++) {

            if (StringUtils.isNumeric(days[i])) {
                cronSplited[4] = cronSplited[4].replace(days[i], String.valueOf(Integer.parseInt(days[i]) + 1));
                days = cronSplited[4].split("[,-\\-]+");
            }
        }

        // Force 0 for seconds field
        result = "0 " + String.join(" ", cronSplited) + " *";
    } else if ((a_from == CronType.QUARTZ) && (a_to == CronType.UNIX)) {
        result = a_cronString.substring(2, a_cronString.length() - 2).replace("?", "*");
    }
    return result;
}

@Override
public String toString() {
    if (isCorrect) {
        if (isManual)
            return "manual";
        else
            return unixDefinition;
    } else {
        return "incorrect definition : " + unixDefinition;
    }
}