# 定时任务   @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")); } ```