From 9913943a272445ef9c6952b07da6ec34deee3f80 Mon Sep 17 00:00:00 2001 From: v-zhangjc9 Date: Fri, 26 Apr 2024 20:04:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(scheduler):=20=E5=A2=9E=E5=8A=A0=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E6=97=B6=E9=97=B4=E8=8C=83=E5=9B=B4=E5=86=85=E5=9C=A8?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E9=9B=86=E7=BE=A4=E8=BF=90=E8=A1=8C/?= =?UTF-8?q?=E4=B8=8D=E8=BF=90=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../distribute/strategy/DatetimeLimit.java | 7 +++++-- .../service/scheduler/TestStrategy.java | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 service-scheduler/src/test/java/com/lanyuanxiaoyao/service/scheduler/TestStrategy.java diff --git a/service-scheduler/src/main/java/com/lanyuanxiaoyao/service/scheduler/quartz/distribute/strategy/DatetimeLimit.java b/service-scheduler/src/main/java/com/lanyuanxiaoyao/service/scheduler/quartz/distribute/strategy/DatetimeLimit.java index 4f25411..6a6cc10 100644 --- a/service-scheduler/src/main/java/com/lanyuanxiaoyao/service/scheduler/quartz/distribute/strategy/DatetimeLimit.java +++ b/service-scheduler/src/main/java/com/lanyuanxiaoyao/service/scheduler/quartz/distribute/strategy/DatetimeLimit.java @@ -4,6 +4,7 @@ import com.cronutils.model.CronType; import com.cronutils.model.definition.CronDefinitionBuilder; import com.cronutils.model.time.ExecutionTime; import com.cronutils.parser.CronParser; +import java.time.ZoneId; import java.time.ZonedDateTime; /** @@ -15,14 +16,16 @@ import java.time.ZonedDateTime; public class DatetimeLimit implements AvailableStrategy { private static final CronParser PARSER = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ)); + private final Boolean runInPeriod; private final ExecutionTime execution; - public DatetimeLimit(String cron) { + public DatetimeLimit(Boolean runInPeriod, String cron) { + this.runInPeriod = runInPeriod; this.execution = ExecutionTime.forCron(PARSER.parse(cron)); } @Override public boolean available() { - return execution.isMatch(ZonedDateTime.now()); + return runInPeriod == execution.isMatch(ZonedDateTime.now().withNano(0)); } } diff --git a/service-scheduler/src/test/java/com/lanyuanxiaoyao/service/scheduler/TestStrategy.java b/service-scheduler/src/test/java/com/lanyuanxiaoyao/service/scheduler/TestStrategy.java new file mode 100644 index 0000000..26c63c6 --- /dev/null +++ b/service-scheduler/src/test/java/com/lanyuanxiaoyao/service/scheduler/TestStrategy.java @@ -0,0 +1,17 @@ +package com.lanyuanxiaoyao.service.scheduler; + +import com.lanyuanxiaoyao.service.scheduler.quartz.distribute.strategy.AvailableStrategy; +import com.lanyuanxiaoyao.service.scheduler.quartz.distribute.strategy.DatetimeLimit; + +/** + * @author lanyuanxiaoyao + * @date 2024-04-26 + */ +public class TestStrategy { + public static void main(String[] args) { + AvailableStrategy strategy = AvailableStrategy.and( + new DatetimeLimit(false, "* * 7-19 28-30 4 ? 2024") + ); + System.out.println(strategy.available()); + } +}