diff --git a/src/main/java/org/redkale/annotation/Scheduled.java b/src/main/java/org/redkale/annotation/Scheduled.java
index e2e3c793f..b1395d298 100644
--- a/src/main/java/org/redkale/annotation/Scheduled.java
+++ b/src/main/java/org/redkale/annotation/Scheduled.java
@@ -28,7 +28,9 @@ public @interface Scheduled {
String name() default "";
/**
- * cron表达式
+ * cron表达式, 特殊值:
+ * yearly、annually、monthly、weekly、daily、midnight、hourly、minutely
+ * 1m、2m、3m、5m、10m、15m、30m、1h、2h、3h、6h
*
* @return cron表达式
*/
diff --git a/src/main/java/org/redkale/scheduling/ScheduledFactory.java b/src/main/java/org/redkale/scheduling/ScheduledFactory.java
index bef09acf9..ee1480d20 100644
--- a/src/main/java/org/redkale/scheduling/ScheduledFactory.java
+++ b/src/main/java/org/redkale/scheduling/ScheduledFactory.java
@@ -56,8 +56,8 @@ public class ScheduledFactory {
protected ScheduledFactory(UnaryOperator propertyFunc) {
this.propertyFunc = propertyFunc;
- this.scheduler = new ScheduledThreadPoolExecutor(Utility.cpus(), Utility.newThreadFactory("Scheduled-Task-Thread-%s"));
- this.scheduler.setRemoveOnCancelPolicy(true);
+ this.scheduler = new ScheduledThreadPoolExecutor(Utility.cpus(), Utility.newThreadFactory("Scheduled-Task-Thread-%s"));
+ this.scheduler.setRemoveOnCancelPolicy(true);
}
public static ScheduledFactory create(UnaryOperator propertyFunc) {
@@ -149,9 +149,9 @@ public class ScheduledFactory {
CronExpression cronExpr = CronExpression.parse(cron);
return new CronTask(ref, name, method, cronExpr, zoneId);
} else {
- long fixedDelayLong = Long.parseLong(fixedDelay);
- long fixedRateLong = Long.parseLong(fixedRate);
- long initialDelayLong = Long.parseLong(initialDelay);
+ long fixedDelayLong = getLongValue(fixedDelay);
+ long fixedRateLong = getLongValue(fixedRate);
+ long initialDelayLong = getLongValue(initialDelay);
return new FixedTask(ref, name, method, fixedDelayLong, fixedRateLong, initialDelayLong, timeUnit);
}
}
@@ -187,6 +187,22 @@ public class ScheduledFactory {
return propertyFunc.apply(value);
}
+ //支持5*60乘法表达式
+ protected long getLongValue(String value) {
+ if (value.indexOf('*') > -1) {
+ long rs = 1;
+ boolean flag = false;
+ for (String v : value.split("\\*")) {
+ if (!v.trim().isEmpty()) {
+ rs *= Long.parseLong(v.trim());
+ flag = true;
+ }
+ }
+ return flag ? rs : -1;
+ }
+ return Long.parseLong(value);
+ }
+
public void destroy() {
if (scheduler != null) {
scheduler.shutdown();