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.definition.CronDefinitionBuilder;
import com.cronutils.model.time.ExecutionTime; import com.cronutils.model.time.ExecutionTime;
import com.cronutils.parser.CronParser; import com.cronutils.parser.CronParser;
import java.time.ZoneId;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
/** /**
@@ -15,14 +16,16 @@ import java.time.ZonedDateTime;
public class DatetimeLimit implements AvailableStrategy { public class DatetimeLimit implements AvailableStrategy {
private static final CronParser PARSER = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ)); private static final CronParser PARSER = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ));
private final Boolean runInPeriod;
private final ExecutionTime execution; private final ExecutionTime execution;
public DatetimeLimit(String cron) { public DatetimeLimit(Boolean runInPeriod, String cron) {
this.runInPeriod = runInPeriod;
this.execution = ExecutionTime.forCron(PARSER.parse(cron)); this.execution = ExecutionTime.forCron(PARSER.parse(cron));
} }
@Override @Override
public boolean available() { 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());
}
}