From ce36250e60b7a1fbd3794208123a2c847d954022 Mon Sep 17 00:00:00 2001 From: redkale Date: Fri, 22 Dec 2023 14:15:00 +0800 Subject: [PATCH] Scheduled --- src/main/java/org/redkale/schedule/Scheduled.java | 10 ++++++++-- .../schedule/spi/ScheduleManagerService.java | 14 ++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/redkale/schedule/Scheduled.java b/src/main/java/org/redkale/schedule/Scheduled.java index e0ffd285e..9e9d72d8b 100644 --- a/src/main/java/org/redkale/schedule/Scheduled.java +++ b/src/main/java/org/redkale/schedule/Scheduled.java @@ -22,7 +22,7 @@ import java.util.concurrent.TimeUnit; public @interface Scheduled { /** - * 名称, 也可以用于第三方实现的定时任务组件的key + * 名称, 可用于第三方实现的定时任务组件的key * * @return 名称 */ @@ -32,6 +32,7 @@ public @interface Scheduled { * cron表达式, 特殊值:
* yearly、annually、monthly、weekly、daily、midnight、hourly、minutely * 1m、2m、3m、5m、10m、15m、30m、1h、2h、3h、6h + * ${env.scheduling.cron}: 读取系统配置项 * * @return cron表达式 */ @@ -51,6 +52,8 @@ public @interface Scheduled { * 5*60: 乘法表达式,值为30 * ${env.scheduling.fixedDelay}: 读取系统配置项 * #delays: 读取宿主对象的delays字段值作为值,字段类型必须是int、long数值类型 + * + * 值大于0且fixedRate小于0则使用 ScheduledThreadPoolExecutor.scheduleWithFixedDelay * * @return 延迟时间 */ @@ -63,6 +66,8 @@ public @interface Scheduled { * 5*60: 乘法表达式,值为30 * ${env.scheduling.fixedRate}: 读取系统配置项 * #intervals: 读取宿主对象的intervals字段值作为值,字段类型必须是int、long数值类型 + * + * 值大于0则使用 ScheduledThreadPoolExecutor.scheduleAtFixedRate * * @return 周期时间 */ @@ -75,7 +80,8 @@ public @interface Scheduled { * 5*60: 乘法表达式,值为30 * ${env.scheduling.initialDelay}: 读取系统配置项 * #inits: 读取宿主对象的inits字段值作为值,字段类型必须是int、long数值类型 - * + * + * 值大于0且fixedRate和fixedDelay小于0则使用 ScheduledThreadPoolExecutor.schedule * @return 起始延迟时间 */ String initialDelay() default "-1"; diff --git a/src/main/java/org/redkale/schedule/spi/ScheduleManagerService.java b/src/main/java/org/redkale/schedule/spi/ScheduleManagerService.java index ce84c39ca..1b2253e90 100644 --- a/src/main/java/org/redkale/schedule/spi/ScheduleManagerService.java +++ b/src/main/java/org/redkale/schedule/spi/ScheduleManagerService.java @@ -61,9 +61,9 @@ public class ScheduleManagerService implements ScheduleManager, Service { protected final Logger logger = Logger.getLogger(this.getClass().getSimpleName()); - private final ConcurrentHashMap> refTaskMap = new ConcurrentHashMap<>(); + protected final ConcurrentHashMap> refTaskMap = new ConcurrentHashMap<>(); - private final ReentrantLock lock = new ReentrantLock(); + protected final ReentrantLock lock = new ReentrantLock(); @Resource(required = false) protected Application application; @@ -73,7 +73,7 @@ public class ScheduleManagerService implements ScheduleManager, Service { private ScheduledThreadPoolExecutor scheduler; - private boolean enabled = true; + protected boolean enabled = true; protected AnyValue config; @@ -202,7 +202,7 @@ public class ScheduleManagerService implements ScheduleManager, Service { String name, String cron, String fixedDelay, String fixedRate, String initialDelay, String zone, TimeUnit timeUnit) { if ((cron.isEmpty() || "-".equals(cron)) && "-1".equals(fixedRate) && "-1".endsWith(fixedDelay)) { - return null; //时间都没配置 + return createdOnlyNameTask(ref, method, taskCount, name, cron, fixedDelay, fixedRate, initialDelay, zone, timeUnit); //时间都没配置 } taskCount.incrementAndGet(); ZoneId zoneId = Utility.isEmpty(zone) ? null : ZoneId.of(zone); @@ -217,6 +217,12 @@ public class ScheduleManagerService implements ScheduleManager, Service { } } + protected ScheduledTask createdOnlyNameTask(WeakReference ref, Method method, AtomicInteger taskCount, + String name, String cron, String fixedDelay, String fixedRate, + String initialDelay, String zone, TimeUnit timeUnit) { + return null; + } + protected Runnable createRunnable(final WeakReference ref, Method method) { try { if (!Modifier.isPublic(method.getModifiers())) {