From 74b91ac5b03322cc48e3755587cdf04f34bbc1b2 Mon Sep 17 00:00:00 2001 From: redkale Date: Sat, 8 Jun 2024 19:00:19 +0800 Subject: [PATCH] =?UTF-8?q?scheduled=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/scheduled.md | 168 +++++++++--------- .../java/META-INF/application-template.xml | 2 +- src/main/java/module-info.java | 6 +- .../java/org/redkale/boot/Application.java | 4 +- .../org/redkale/net/AsyncNioConnection.java | 2 + .../java/org/redkale/net/client/Client.java | 21 ++- src/main/java/org/redkale/net/sncp/Sncp.java | 2 +- .../redkale/props/spi/PropertiesModule.java | 6 +- .../schedule/spi/ScheduleManagerProvider.java | 17 -- .../{schedule => scheduled}/Scheduled.java | 2 +- .../ScheduledEvent.java} | 10 +- .../ScheduledManager.java} | 8 +- .../spi/CronExpression.java | 2 +- .../spi/ScheduleManagerService.java | 26 +-- .../spi/ScheduledManagerProvider.java | 17 ++ .../spi/ScheduledModuleEngine.java} | 56 +++--- .../org/redkale/util/RedkaleClassLoader.java | 12 +- .../ScheduledService.java} | 6 +- .../ScheduledTest.java} | 10 +- 19 files changed, 200 insertions(+), 177 deletions(-) delete mode 100644 src/main/java/org/redkale/schedule/spi/ScheduleManagerProvider.java rename src/main/java/org/redkale/{schedule => scheduled}/Scheduled.java (98%) rename src/main/java/org/redkale/{schedule/ScheduleEvent.java => scheduled/ScheduledEvent.java} (89%) rename src/main/java/org/redkale/{schedule/ScheduleManager.java => scheduled/ScheduledManager.java} (84%) rename src/main/java/org/redkale/{schedule => scheduled}/spi/CronExpression.java (99%) rename src/main/java/org/redkale/{schedule => scheduled}/spi/ScheduleManagerService.java (95%) create mode 100644 src/main/java/org/redkale/scheduled/spi/ScheduledManagerProvider.java rename src/main/java/org/redkale/{schedule/spi/ScheduleModuleEngine.java => scheduled/spi/ScheduledModuleEngine.java} (55%) rename src/test/java/org/redkale/test/{schedule/ScheduleService.java => scheduled/ScheduledService.java} (81%) rename src/test/java/org/redkale/test/{schedule/SchedulingTest.java => scheduled/ScheduledTest.java} (67%) diff --git a/docs/scheduled.md b/docs/scheduled.md index d8c207eb2..cdb7603da 100644 --- a/docs/scheduled.md +++ b/docs/scheduled.md @@ -1,85 +1,85 @@ -# 定时任务 -  @Scheduled注解在Service的方法上,实现对方法结果进行定时运行。方法必须是无参数或者```ScheduleEvent```参数。 - -## 属性说明 -|属性|默认值|说明| -| --- | --- | --- | -|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.scheduling.cron}: 读取系统配置项| -|zone|未定义|时区,```cron```有值才有效, 例如: "Asia/Shanghai"| -|fixedDelay|-1|延迟时间,负数为无效值,支持参数配置、乘法表达式和对象字段值
参数值支持方式:
 100: 设置数值
 ${env.scheduling.fixedDelay}: 读取系统配置项
值大于0且fixedRate小于0则使用 ScheduledThreadPoolExecutor.scheduleWithFixedDelay | -|fixedRate|-1|周期时间,负数为无效值,支持参数配置、乘法表达式和对象字段值
参数值支持方式:
 100: 设置数值
 ${env.scheduling.fixedRate}: 读取系统配置项
值大于0且fixedRate小于0则使用 ScheduledThreadPoolExecutor.scheduleAtFixedRate | -|initialDelay|-1|起始延迟时间,负数为无效值,支持参数配置、乘法表达式和对象字段值
参数值支持方式:
 100: 设置数值
 ${env.scheduling.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.schedule.fixedRate```配置,没配置采用默认值60秒) -```java - @Scheduled(fixedRate = "${env.schedule.fixedRate:60}") - public String task2() { - System.out.println(Times.nowMillis() + "执行一次"); - return ""; - } -``` - - -## 基本配置 -```xml - - -``` - - -## 使用Xxl-Job -  Schedule可以采用第三方实现, 官方扩展包```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的方法上,实现对方法结果进行定时运行。方法必须是无参数或者```ScheduleEvent```参数。 + +## 属性说明 +|属性|默认值|说明| +| --- | --- | --- | +|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 +  Schedule可以采用第三方实现, 官方扩展包```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")); + } ``` \ No newline at end of file diff --git a/src/main/java/META-INF/application-template.xml b/src/main/java/META-INF/application-template.xml index 12dde4cda..8da7a30e5 100644 --- a/src/main/java/META-INF/application-template.xml +++ b/src/main/java/META-INF/application-template.xml @@ -40,7 +40,7 @@ serviceid1_name1 serviceid1_name2 serviceid2_name1 serviceid2_name2 全局Serivce的定时任务设置,没配置该节点将自动创建一个。 enabled: 是否开启缓存功能。默认: true --> - +