From c3d594fc4159f5901f4be8fec291f06decb32be2 Mon Sep 17 00:00:00 2001 From: opensnail <598092184@qq.com> Date: Mon, 13 Jan 2025 22:59:08 +0800 Subject: [PATCH] =?UTF-8?q?feat(1.3.0-beta2):=20=E4=BC=98=E5=8C=96cron?= =?UTF-8?q?=E8=A1=A8=E8=BE=BE=E5=BC=8F=E8=A7=A3=E6=9E=90=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../snailjob/server/common/strategy/WaitStrategies.java | 2 ++ .../com/aizuda/snailjob/server/common/util/CronUtils.java | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/strategy/WaitStrategies.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/strategy/WaitStrategies.java index 324f778e1..d30ff522a 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/strategy/WaitStrategies.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/strategy/WaitStrategies.java @@ -1,5 +1,6 @@ package com.aizuda.snailjob.server.common.strategy; +import cn.hutool.core.lang.Assert; import com.aizuda.snailjob.common.core.exception.SnailJobCommonException; import com.aizuda.snailjob.common.core.util.CronExpression; import com.aizuda.snailjob.server.common.WaitStrategy; @@ -179,6 +180,7 @@ public class WaitStrategies { try { Date nextValidTime = new CronExpression(context.getTriggerInterval()).getNextValidTimeAfter(new Date(context.getNextTriggerAt())); + Assert.notNull(nextValidTime, () -> new SnailJobServerException("表达式错误:{}", context.getTriggerInterval())); return DateUtils.toEpochMilli(nextValidTime); } catch (ParseException e) { throw new SnailJobServerException("解析CRON表达式异常 [{}]", context.getTriggerInterval(), e); diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/util/CronUtils.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/util/CronUtils.java index 75aa0fc02..77ba6b039 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/util/CronUtils.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/util/CronUtils.java @@ -12,6 +12,7 @@ import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Objects; /** * @author opensnail @@ -29,6 +30,9 @@ public class CronUtils { try { ZonedDateTime zdt = now.atZone(ZoneOffset.ofHours(8)); nextValidTime = new CronExpression(cron).getNextValidTimeAfter(Date.from(zdt.toInstant())); + if (Objects.isNull(nextValidTime)) { + continue; + } now = LocalDateTime.ofEpochSecond(nextValidTime.getTime() / 1000, 0, ZoneOffset.ofHours(8)); list.add(DateUtils.format(now, DateUtils.NORM_DATETIME_PATTERN)); } catch (ParseException ignored) { @@ -40,7 +44,8 @@ public class CronUtils { public static long getExecuteInterval(String cron) { List executeTimeByCron = getExecuteTimeByCron(cron, 2); - Assert.isTrue(!executeTimeByCron.isEmpty(), () -> new SnailJobServerException("[{}]表达式解析有误", cron)); + Assert.isTrue(!executeTimeByCron.isEmpty(), () -> new SnailJobServerException("表达式解析有误.[{}]", cron)); + Assert.isTrue(executeTimeByCron.size() == 2, () -> new SnailJobServerException("表达式必须支持多次执行.[{}]", cron)); LocalDateTime first = LocalDateTime.parse(executeTimeByCron.get(0), DateUtils.NORM_DATETIME_PATTERN); LocalDateTime second = LocalDateTime.parse(executeTimeByCron.get(1), DateUtils.NORM_DATETIME_PATTERN); Duration duration = Duration.between(first, second);