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();