【问题标题】:Conversion of jqcron cron format to support Quartz cron format转换 jqcron cron 格式以支持 Quartz cron 格式
【发布时间】:2016-02-18 22:10:21
【问题描述】:

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

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

Support for Quartz plugin

在这个例子中,jqCron js 内部方法被覆盖以支持 Quartz 格式。我们可以在不覆盖 jqCron js 的情况下做到这一点,就像使用一些 js 实用函数一样

谢谢

【问题讨论】:

  • Quartz cron 格式的语法是什么?我认为这些变化并不像add a leading zero and use '?' instead of '*' in final field那么简单?
  • Quartz 格式是秒分时 DayofMonth Month DayofWeek。
  • 所以它只是有一个额外的前导秒列并使用?而不是*? (我假设? 是无处不在的通配符,而不仅仅是在DayOfWeek 列中?)
  • 棘手的部分是使用?从 jqCron 转换为 Quartz Cron 格式。它不是无处不在的通配符。
  • 那么规格是什么?有文档吗?

标签: javascript jquery cron


【解决方案1】:

我在使用以下工具安排 Quartz 作业之前使用后台转换https://github.com/jmrozanec/cron-utils

以及下面的辅助类

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;
    }
}

【讨论】:

    【解决方案2】:

    通过下面的链接。我使用了这个 API,它与石英兼容。

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

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

    $('#schedulerWidget').cron({ 初始:“0 0/1 * * * ?”, onChange:函数(){ cronValue = $('#schedulerWidget').cron("value"); console.log('Cron 更新值:'+cronValue); $("#schedulerWidgetSelectedValue").text(cronValue); }, 自定义值:{ “5 分钟”:“0 0/5 * * * ?” } });

    【讨论】:

      猜你喜欢
      • 2018-10-25
      • 2016-01-18
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多