美文网首页
根据Cron表达式获取近几次任务执行时间(Spring + Qu

根据Cron表达式获取近几次任务执行时间(Spring + Qu

作者: 不善言谈_ | 来源:发表于2019-08-23 15:01 被阅读0次

1.Spring 自带的



    /**
     * 计算cron表达式近n次时间-(6段-秒 分 时 日 月 周)
     *
     * @param cronExpression cron表达式
     * @param cronCount      下几次运行时间
     * @param maxCronCount   最大执行次数
     * @return List<String>
     */
    @RequestMapping(value = "listCronRunTime")
    public AjaxResult listCronRunTime(
            @RequestParam(value = "cronExpression", required = false) String cronExpression,
            @RequestParam(value = "cronCount", required = false, defaultValue = "1") Integer cronCount,
            @RequestParam(value = "maxCronCount", required = false, defaultValue = "100") Integer maxCronCount) {
        if (StringUtils.isBlank(cronExpression)) {
            return new AjaxResult(-1, "Cron 表达式不能为空!");
        }
        if (!CronSequenceGenerator.isValidExpression(cronExpression)) {
            return new AjaxResult(-1, "Cron格式不正确,Cron:" + cronExpression);
        }
        if (cronCount < 1) {
            cronCount = 1;
        }
        if (maxCronCount < 1) {
            maxCronCount = 100;
        }
        if (cronCount > maxCronCount) {
            cronCount = maxCronCount;
        }
        CronSequenceGenerator cronSequenceGenerator = new CronSequenceGenerator(cronExpression);
        List<String> cronTimeList = new ArrayList<>();
        Date nextTimePoint = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        for (int i = 0; i < cronCount; i++) {
            nextTimePoint = cronSequenceGenerator.next(nextTimePoint);
            cronTimeList.add(sdf.format(nextTimePoint));
        }
        return new AjaxResult(cronTimeList);
    }

2.第二种 Quartz


首先引入maven依赖或者引入jar(本来就有定时任务的,此步骤省略)

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.0</version>
</dependency>

(1).

/**
 *
 * @param cronExpression    cron表达式
 * @param numTimes    下几次运行时间
 * @return
 */
public static List<String> getNextExecTime(String cronExpression,Integer numTimes) {
        List<String> list = new ArrayList<>();
        CronTriggerImpl cronTriggerImpl = new CronTriggerImpl();
        try {
            cronTriggerImpl.setCronExpression(cronExpression);
        } catch(ParseException e) {
            e.printStackTrace();
        }
        // 这个是重点,一行代码搞定
        List<Date> dates = TriggerUtils.computeFireTimes(cronTriggerImpl, null, numTimes);
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        for (Date date : dates) {
            list.add(dateFormat.format(date));
        }
        return list;
}

(2).

    /**
     * 最近n次运行时间 Date[]-(7段-秒 分 时 日 月 周 年)
     *
     * @param cron  表达式
     * @param count 运行次数
     */
    public static Date[] getCronScheduledDate(String cron, Integer count) {
        if (!CronExpression.isValidExpression(cron)) {
            System.out.println("定时任务Cron格式不正确,Cron:" + cron);
            return null;
        }
        if (count == null || count < 1) {
            count = 1;
        }
        Date[] dateArray = new Date[count];
        CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("Caclulate Date").withSchedule(CronScheduleBuilder.cronSchedule(cron)).build();
        Date time0 = trigger.getStartTime();
        Date time1 = trigger.getFireTimeAfter(time0);
        dateArray[0] = time1;
        if (dateArray.length > 1) {
            Date timeTemp = time1;
            for (int i = 1; i < dateArray.length; i++) {
                timeTemp = trigger.getFireTimeAfter(timeTemp);
                if (timeTemp != null) {
                    dateArray[i] = timeTemp;
                } else {
                    break;
                }
            }
        }
        return dateArray;
    }

检验表达式是否正确(spring + quartz)


    /**
     * 检验表达式是否正确-spring(org.springframework.scheduling.support.CronSequenceGenerator)
     *
     * @param cron cron表达式
     * @return 正确:true
     */
    public static boolean cronValidExpressionFlag(String cron) {
        return StringUtils.isNotBlank(cron) && CronSequenceGenerator.isValidExpression(cron);
    }
    /**
     * 检验表达式是否正确-quartz(org.quartz.CronExpression)
     *
     * @param cron cron表达式
     * @return 正确:true
     */
    public static boolean cronValidExpressionFlag(String cron) {
        return StringUtils.isNotBlank(cron) && CronExpression.isValidExpression(cron);
    }

相关文章

  • 根据Cron表达式获取近几次任务执行时间(Spring + Qu

    1.Spring 自带的 2.第二种 Quartz 首先引入maven依赖或者引入jar(本来就有定时任务的,此步...

  • spring 定时器 cron

    1. 注解配置quartz应用 2.spring cron 时间从配置文件获取 3.cron 表达式简单说明

  • SpringTask(Spring定时任务注解方式)

    1.Spring配置文件 2.任务类 3.cron表达式说明 cron表达式通常用于配置计划任务的触发时间。一个c...

  • Spring Schedule

    Cron表达式快速入门 Spring Schedule Cron配置 @Component @Scheduled ...

  • Cron 表达式

    cron表达式是什么 定时任务中,我们在方法上使用@Scheduled注解来设置任务的执行时间的一种属性配置方法 ...

  • cron 表达式的使用

    定时任务中 cron 表达式的使用 在线生成 cron 表达式http://cron.qqe2.com/

  • Cron表达式

    Cron表达式 用SpringBoot定义定时任务时, 用到了 cron表达式 ,然后在此详细了解一下cron表达...

  • Cron表达式

    Cron表达式 用SpringBoot定义定时任务时, 用到了 cron表达式 ,然后在此详细了解一下cron表达...

  • DatistEQ之CRON编辑器

    Cron表达式,适用于周期性执行、日常维护、在某时刻需要完成的单次任务等场景。 Cron表达式介绍 Cron表达式...

  • Spring Boot 定时任务

    要学习定时任务,需要先了解cron表达式 cron表达式解释 cron表达式由6~7个字段组成,每个字段之间用空格...

网友评论

      本文标题:根据Cron表达式获取近几次任务执行时间(Spring + Qu

      本文链接:https://www.haomeiwen.com/subject/vcqtectx.html