Files
redkale/docs/scheduled.md
2024-06-08 19:00:19 +08:00

4.0 KiB
Raw Blame History

定时任务

@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对象中的定时任务不起作用

基本用法

  每秒执行

    @Scheduled(cron = "0/1 * * * * ?")
    public void task1() {
        System.out.println(Times.nowMillis() + "执行一次");
    }

数值配置, 系统启动后延迟10分钟后每60分钟执行一次

    @Scheduled(fixedDelay = "10", fixedRate = "60", timeUnit = TimeUnit.MINUTES)
    private void task3() {
        System.out.println(Times.nowMillis() + "执行一次");
    }

环境配置, 定时间隔时间由环境变量env.scheduled.fixedRate配置没配置采用默认值60秒)

    @Scheduled(fixedRate = "${env.scheduled.fixedRate:60}")
    public String task2() {
        System.out.println(Times.nowMillis() + "执行一次");
        return "";
    }

基本配置

    <!--
        全局Serivce的定时任务设置没配置该节点将自动创建一个。
        enabled 是否开启缓存功能。默认: true
    -->
    <scheduled enabled="true"/>

使用Xxl-Job

Schedule可以采用第三方实现, 官方扩展包redkale-plugins提供了xxl-job实现且不依赖xxl-job包。

pom依赖

    <dependency>
        <groupId>org.redkalex</groupId>
        <artifactId>redkale-plugins</artifactId>
        <version>2.8.0</version>
    </dependency> 

配置文件

    <schedule enabled="true">    
        <xxljob addresses="http://localhost:8080/xxl-job-admin" 
                executorName="redkale-examples" 
                ip="127.0.0.1" <!-- 可选 -->
                port="5678"    <!-- 可选 -->
                accessToken="default_token" />
    </schedule>

使用方法

    @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"));
    }