package tech.powerjob.server.core.scheduler.auxiliary.impl; import org.springframework.stereotype.Component; import tech.powerjob.common.PowerJobDKey; import tech.powerjob.common.enums.TimeExpressionType; import tech.powerjob.common.exception.PowerJobException; import tech.powerjob.server.core.scheduler.auxiliary.AbstractTimingStrategyHandler; /** * @author Echo009 * @since 2022/3/22 */ @Component public class FixedRateTimingStrategyHandler extends AbstractTimingStrategyHandler { @Override public void validate(String timeExpression) { long delay; try { delay = Long.parseLong(timeExpression); } catch (Exception e) { throw new PowerJobException("invalid timeExpression!"); } // 默认 120s ,超过这个限制应该使用考虑使用其他类型以减少资源占用 int maxInterval = Integer.parseInt(System.getProperty(PowerJobDKey.FREQUENCY_JOB_MAX_INTERVAL, "120000")); if (delay > maxInterval) { throw new PowerJobException("the rate must be less than " + maxInterval + "ms"); } if (delay <= 0) { throw new PowerJobException("the rate must be greater than 0 ms"); } } @Override public Long calculateNextTriggerTime(Long preTriggerTime, String timeExpression, Long startTime, Long endTime) { long r = startTime != null && startTime > preTriggerTime ? startTime : preTriggerTime + Long.parseLong(timeExpression); return endTime != null && endTime < r ? null : r; } @Override public TimeExpressionType supportType() { return TimeExpressionType.FIXED_RATE; } }