前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >根据corn 表达式 ,获取下一次的执行时间,或者接下来多次的执行时间

根据corn 表达式 ,获取下一次的执行时间,或者接下来多次的执行时间

作者头像
一写代码就开心
发布2022-08-14 11:01:15
1.3K0
发布2022-08-14 11:01:15
举报
文章被收录于专栏:java和python

这里写目录标题

1 代码

根据一个corn表达式,获取接下来5次的 执行时间

controller 层

代码语言:javascript
复制
/**
	 *  获取下次调度时间
	 * @param scheduleType  调度类型   一般是corn
	 * @param scheduleConf   调度具体值   corn 的表达式
	 *
	 */
	@RequestMapping("/nextTriggerTime")
	@ResponseBody
	public ReturnT<List<String>> nextTriggerTime(String scheduleType, String scheduleConf) {


//		创建任务 对象
		XxlJobInfo paramXxlJobInfo = new XxlJobInfo();
		paramXxlJobInfo.setScheduleType(scheduleType);
		paramXxlJobInfo.setScheduleConf(scheduleConf);

		List<String> result = new ArrayList<>();
		try {
//			当前时间
			Date lastTime = new Date();
			for (int i = 0; i < 5; i++) {
//				从当前时间开始计算,当前任务的下一次  调度时间是多少
				lastTime = JobScheduleHelper.generateNextValidTime(paramXxlJobInfo, lastTime);
				if (lastTime != null) {
//					将计算出来的时间  转为 年月日时分秒  格式
					result.add(DateUtil.formatDateTime(lastTime));
				} else {
					break;
				}
			}
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
			return new ReturnT<List<String>>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) + e.getMessage());
		}
		return new ReturnT<List<String>>(result);

	}

具体代码

代码语言:javascript
复制
  /**
     * 根据任务的调度类型 ,从当前时间的后5秒开始,获取到当前任务下一次调度的时间
     * @param jobInfo
     * @param fromTime
     */
    public static Date generateNextValidTime(XxlJobInfo jobInfo, Date fromTime) throws Exception {

//        查询出当前  任务的调度类型
        ScheduleTypeEnum scheduleTypeEnum = ScheduleTypeEnum.match(jobInfo.getScheduleType(), null);

        if (ScheduleTypeEnum.CRON == scheduleTypeEnum) {
            Date nextValidTime = new CronExpression(jobInfo.getScheduleConf()).getNextValidTimeAfter(fromTime);
            return nextValidTime;
        }

        else if (ScheduleTypeEnum.FIX_RATE == scheduleTypeEnum /*|| ScheduleTypeEnum.FIX_DELAY == scheduleTypeEnum*/) {
            return new Date(fromTime.getTime() + Integer.valueOf(jobInfo.getScheduleConf())*1000 );
        }
        return null;
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 这里写目录标题
  • 1 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档