新增: CronUtil.isValidExpression方法,验证传入的Cron表达式是否合法;完善PatternParser.parseGroupPattern逻辑,加入对传入表达式为null和空的校验。

This commit is contained in:
随风 2025-01-25 12:59:14 +08:00
parent 1564c55f7d
commit be41fc2031
3 changed files with 29 additions and 0 deletions

View File

@ -20,6 +20,7 @@ package org.dromara.hutool.cron;
import org.dromara.hutool.core.exception.HutoolException;
import org.dromara.hutool.core.io.resource.NoResourceException;
import org.dromara.hutool.cron.pattern.CronPattern;
import org.dromara.hutool.cron.pattern.parser.PatternParser;
import org.dromara.hutool.cron.task.Task;
import org.dromara.hutool.setting.Setting;
import org.dromara.hutool.setting.SettingException;
@ -211,4 +212,20 @@ public class CronUtil {
scheduler.stop(true);
}
/**
* 验证是否为合法的Cron表达式
*/
public static boolean isValidExpression(String expression) {
if (expression == null) {
return false;
} else {
try {
PatternParser.parse(expression);
return true;
} catch (RuntimeException e) {
return false;
}
}
}
}

View File

@ -63,6 +63,7 @@ public class PatternParser {
* @return {@link List}
*/
private static List<PatternMatcher> parseGroupPattern(final String groupPattern) {
Assert.notBlank(groupPattern, "Cron expression must not be empty!");
final List<String> patternList = SplitUtil.splitTrim(groupPattern, "|");
final List<PatternMatcher> patternMatchers = new ArrayList<>(patternList.size());
for (final String pattern : patternList) {

View File

@ -96,4 +96,15 @@ public class CronTest {
CronUtil.setMatchSecond(true);
CronUtil.start();
}
@Test
@Disabled
public void isValidExpressionTest() {
Console.log(CronUtil.isValidExpression("5 * * * *"));
Console.log(CronUtil.isValidExpression("3-18 5 * * * *"));
Console.log(CronUtil.isValidExpression(""));
Console.log(CronUtil.isValidExpression(null));
Console.log(CronUtil.isValidExpression("A B C D E F"));
}
}