feat(scheduler): 增加指定时间范围内在指定集群运行/不运行

This commit is contained in:
v-zhangjc9
2024-04-26 20:04:05 +08:00
parent befb383bee
commit 9913943a27
2 changed files with 22 additions and 2 deletions

View File

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

View File

@@ -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());
}
}