From def85ca1ac5c70b3d4aba6272f474d6166ca9229 Mon Sep 17 00:00:00 2001 From: redkale Date: Sat, 29 Jun 2024 12:16:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/scheduled.md | 168 +++++++++--------- .../cached/spi/CachedManagerService.java | 2 +- .../java/org/redkale/scheduled/Scheduled.java | 2 +- .../org/redkale/scheduled/ScheduledEvent.java | 8 +- 4 files changed, 93 insertions(+), 87 deletions(-) diff --git a/docs/scheduled.md b/docs/scheduled.md index cfd87757d..6930bbd24 100644 --- a/docs/scheduled.md +++ b/docs/scheduled.md @@ -1,85 +1,85 @@ -# 定时任务 -  @Scheduled注解在Service的方法上,实现对方法结果进行定时运行。方法必须是无参数或者```ScheduledEvent```参数。 - -## 属性说明 -|属性|默认值|说明| -| --- | --- | --- | -|name|未定义|名称, 可用于第三方实现的定时任务组件的key, 比如xxl-job的任务标识| -|cron|未定义|cron表达式,也可以使用常量值:
 @yearly、@annually、@monthly、@weekly、
 @daily、@midnight、@hourly、@minutely
 @1m、@2m、@3m、@5m、@10m、@15m、@30m
 @1h、@2h、@3h、@6h
 ${env.scheduled.cron}: 读取系统配置项| -|zone|未定义|时区,```cron```有值才有效, 例如: "Asia/Shanghai"| -|fixedDelay|-1|延迟时间,负数为无效值,支持参数配置、乘法表达式和对象字段值
参数值支持方式:
 100: 设置数值
 ${env.scheduled.fixedDelay}: 读取系统配置项
值大于0且fixedRate小于0则使用 ScheduledThreadPoolExecutor.scheduleWithFixedDelay | -|fixedRate|-1|周期时间,负数为无效值,支持参数配置、乘法表达式和对象字段值
参数值支持方式:
 100: 设置数值
 ${env.scheduled.fixedRate}: 读取系统配置项
值大于0且fixedRate小于0则使用 ScheduledThreadPoolExecutor.scheduleAtFixedRate | -|initialDelay|-1|起始延迟时间,负数为无效值,支持参数配置、乘法表达式和对象字段值
参数值支持方式:
 100: 设置数值
 ${env.scheduled.initialDelay}: 读取系统配置项
值大于0且fixedRate和fixedDelay小于0则使用 ScheduledThreadPoolExecutor.schedule | -|timeUnit|```TimeUnit.SECONDS```|时间单位TimeUnit| -|comment|未定义|备注描述| -|mode|```LoadMode.LOCAL```|作用于Service模式,默认值为:LOCAL,
LOCAL: 表示远程模式的Service对象中的定时任务不起作用| - -## 基本用法 -  每秒执行 -```java - @Scheduled(cron = "0/1 * * * * ?") - public void task1() { - System.out.println(Times.nowMillis() + "执行一次"); - } -``` - -  数值配置, 系统启动后延迟10分钟后每60分钟执行一次, -```java - @Scheduled(fixedDelay = "10", fixedRate = "60", timeUnit = TimeUnit.MINUTES) - private void task3() { - System.out.println(Times.nowMillis() + "执行一次"); - } -``` - -  环境配置, 定时间隔时间由环境变量```env.scheduled.fixedRate```配置,没配置采用默认值60秒) -```java - @Scheduled(fixedRate = "${env.scheduled.fixedRate:60}") - public String task2() { - System.out.println(Times.nowMillis() + "执行一次"); - return ""; - } -``` - - -## 基本配置 -```xml - - -``` - - -## 使用Xxl-Job -  Scheduled可以采用第三方实现, 官方扩展包```redkale-plugins```提供了xxl-job实现,且不依赖xxl-job包。 - -### pom依赖 -```xml - - org.redkalex - redkale-plugins - 2.8.0 - -``` - -### 配置文件 -```xml - - - port="5678" - accessToken="default_token" /> - -``` - -### 使用方法 -```java - @Scheduled(name = "testTask") - public void runTask(ScheduleEvent event) { - System.out.println("xxl-job参数param: " + event.getString("param")); - System.out.println("xxl-job参数index: " + event.getInteger("index")); - System.out.println("xxl-job参数total: " + event.getInteger("total")); - } +# 定时任务 +  @Scheduled注解在Service的方法上,实现对方法结果进行定时运行。方法必须是无参数或者```ScheduledEvent```参数。 + +## 属性说明 +|属性|默认值|说明| +| --- | --- | --- | +|name|未定义|名称, 可用于第三方实现的定时任务组件的key, 比如xxl-job的任务标识| +|cron|未定义|cron表达式,也可以使用常量值:
 @yearly、@annually、@monthly、@weekly、
 @daily、@midnight、@hourly、@minutely
 @1m、@2m、@3m、@5m、@10m、@15m、@30m
 @1h、@2h、@3h、@6h
 ${env.scheduled.cron}: 读取系统配置项| +|zone|未定义|时区,```cron```有值才有效, 例如: "Asia/Shanghai"| +|fixedDelay|-1|延迟时间,负数为无效值,支持参数配置、乘法表达式和对象字段值
参数值支持方式:
 100: 设置数值
 ${env.scheduled.fixedDelay}: 读取系统配置项
值大于0且fixedRate小于0则使用 ScheduledThreadPoolExecutor.scheduleWithFixedDelay | +|fixedRate|-1|周期时间,负数为无效值,支持参数配置、乘法表达式和对象字段值
参数值支持方式:
 100: 设置数值
 ${env.scheduled.fixedRate}: 读取系统配置项
值大于0且fixedRate小于0则使用 ScheduledThreadPoolExecutor.scheduleAtFixedRate | +|initialDelay|-1|起始延迟时间,负数为无效值,支持参数配置、乘法表达式和对象字段值
参数值支持方式:
 100: 设置数值
 ${env.scheduled.initialDelay}: 读取系统配置项
值大于0且fixedRate和fixedDelay小于0则使用 ScheduledThreadPoolExecutor.schedule | +|timeUnit|```TimeUnit.SECONDS```|时间单位TimeUnit| +|comment|未定义|备注描述| +|mode|```LoadMode.LOCAL```|作用于Service模式,默认值为:LOCAL,
LOCAL: 表示远程模式的Service对象中的定时任务不起作用| + +## 基本用法 +  每秒执行 +```java + @Scheduled(cron = "0/1 * * * * ?") + public void task1() { + System.out.println(Times.nowMillis() + "执行一次"); + } +``` + +  数值配置, 系统启动后延迟10分钟后每60分钟执行一次, +```java + @Scheduled(fixedDelay = "10", fixedRate = "60", timeUnit = TimeUnit.MINUTES) + private void task3() { + System.out.println(Times.nowMillis() + "执行一次"); + } +``` + +  环境配置, 定时间隔时间由环境变量```env.scheduled.fixedRate```配置,没配置采用默认值60秒) +```java + @Scheduled(fixedRate = "${env.scheduled.fixedRate:60}") + public String task2() { + System.out.println(Times.nowMillis() + "执行一次"); + return ""; + } +``` + + +## 基本配置 +```xml + + +``` + + +## 使用Xxl-Job +  Scheduled可以采用第三方实现, 官方扩展包```redkale-plugins```提供了xxl-job实现,且不依赖xxl-job包。 + +### pom依赖 +```xml + + org.redkalex + redkale-plugins + 2.8.0 + +``` + +### 配置文件 +```xml + + + port="5678" + accessToken="default_token" /> + +``` + +### 使用方法 +```java + @Scheduled(name = "testTask") + public void runTask(ScheduledEvent event) { + System.out.println("xxl-job参数param: " + event.getString("param")); + System.out.println("xxl-job参数index: " + event.getInteger("index")); + System.out.println("xxl-job参数total: " + event.getInteger("total")); + } ``` \ No newline at end of file diff --git a/src/main/java/org/redkale/cached/spi/CachedManagerService.java b/src/main/java/org/redkale/cached/spi/CachedManagerService.java index 63d05899b..af4b249a8 100644 --- a/src/main/java/org/redkale/cached/spi/CachedManagerService.java +++ b/src/main/java/org/redkale/cached/spi/CachedManagerService.java @@ -139,7 +139,7 @@ public class CachedManagerService implements CachedManager, CachedActionFunc, Se * 检查name是否含特殊字符 * * @param value 参数 - * @return + * @return value */ protected String checkSchema(String value) { if (value != null && !value.isEmpty()) { diff --git a/src/main/java/org/redkale/scheduled/Scheduled.java b/src/main/java/org/redkale/scheduled/Scheduled.java index 8d0df702e..254be81cb 100644 --- a/src/main/java/org/redkale/scheduled/Scheduled.java +++ b/src/main/java/org/redkale/scheduled/Scheduled.java @@ -8,7 +8,7 @@ import java.util.concurrent.TimeUnit; import org.redkale.service.LoadMode; /** - * 定时任务标记,只能作用于Service的无参数或者单一ScheduleEvent参数的菲static方法上, 功能类似Spring里的Scheduled注解 + * 定时任务标记,只能作用于Service的无参数或者单一{@link org.redkale.scheduled.ScheduledEvent}参数的菲static方法上, 功能类似Spring里的Scheduled注解 * *

详情见: https://redkale.org * diff --git a/src/main/java/org/redkale/scheduled/ScheduledEvent.java b/src/main/java/org/redkale/scheduled/ScheduledEvent.java index e9d0aa598..c39357194 100644 --- a/src/main/java/org/redkale/scheduled/ScheduledEvent.java +++ b/src/main/java/org/redkale/scheduled/ScheduledEvent.java @@ -36,7 +36,13 @@ public final class ScheduledEvent { public T getJson(String name, Type type) { Object obj = get(name); - return obj == null ? null : JsonConvert.root().convertFrom(type, obj.toString()); + if (obj == null) { + return null; + } else if (type instanceof Class && ((Class) type).isAssignableFrom(obj.getClass())) { + return (T) obj; + } else { + return JsonConvert.root().convertFrom(type, obj.toString()); + } } public String getString(String name) {