Skip to content

Commit 6f2fe5d

Browse files
committed
(Re)introduce CronExpression::isValidExpression
This commit introduces CronExpression::isValidExpression, which was also present on the deprecated CronSequenceGenerator. Closes: gh-26996
1 parent da9ee06 commit 6f2fe5d

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

spring-context/src/main/java/org/springframework/scheduling/support/CronExpression.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2020 the original author or authors.
2+
* Copyright 2002-2021 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -202,6 +202,25 @@ public static CronExpression parse(String expression) {
202202
}
203203
}
204204

205+
/**
206+
* Determine whether the given string represents a valid cron expression.
207+
* @param expression the expression to evaluate
208+
* @return {@code true} if the given expression is a valid cron expression
209+
* @since 5.3.8
210+
*/
211+
public static boolean isValidExpression(@Nullable String expression) {
212+
if (expression == null) {
213+
return false;
214+
}
215+
try {
216+
parse(expression);
217+
return true;
218+
}
219+
catch (IllegalArgumentException ex) {
220+
return false;
221+
}
222+
}
223+
205224

206225
private static String resolveMacros(String expression) {
207226
expression = expression.trim();

spring-context/src/test/java/org/springframework/scheduling/support/CronExpressionTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,16 @@ public boolean matches(Temporal value) {
5151
}
5252
};
5353

54+
@Test
55+
public void isValidExpression() {
56+
assertThat(CronExpression.isValidExpression(null)).isFalse();
57+
assertThat(CronExpression.isValidExpression("")).isFalse();
58+
assertThat(CronExpression.isValidExpression("*")).isFalse();
59+
assertThat(CronExpression.isValidExpression("* * * * *")).isFalse();
60+
assertThat(CronExpression.isValidExpression("* * * * * * *")).isFalse();
61+
62+
assertThat(CronExpression.isValidExpression("* * * * * *")).isTrue();
63+
}
5464

5565
@Test
5666
void matchAll() {

0 commit comments

Comments
 (0)