ruoyi-cloud的定时任务

78 阅读5分钟

对于刚接触 ruoyi-cloud 又想使用其定时任务功能的新手朋友来说,按照清晰的步骤来操作会更容易上手。ruoyi-cloud 的定时任务功能通常由 ruoyi-job 模块提供支持,它提供了两种主要的任务调用方式:Bean调用Class类调用,其中Bean调用更为常见和简便

🛠️ 核心步骤详解

下面我们围绕Bean调用方式,一步步来看如何创建和配置一个定时任务。

1. 编写后端任务执行类

首先,你需要在后端创建一个具体的任务执行类。

  • 创建任务类:在 ruoyi-job 模块(或其他需要执行定时任务的模块)的 src/main/java 目录下,找到合适的包路径(例如 com.ruoyi.job.task),创建一个新的Java类。
  • 添加注解:在这个类上使用 @Component("自定义任务Bean名称") 注解,这样Spring容器才能管理它,定时任务系统也才能找到它。通常这个Bean名称会取得短一些,方便后续配置。
  • 编写任务方法:在类中编写具体执行任务逻辑的方法。这个方法必须是 public 的,可以包含参数,也可以无参。

示例:一个简单的定时任务类

java

package com.ruoyi.job.task;

import org.springframework.stereotype.Component;

@Component("mySimpleTask") // 定义任务Bean名称为"mySimpleTask"
public class MySimpleTask {

    /**
     * 无参任务方法示例
     */
    public void doTaskNoParams() {
        System.out.println("执行无参定时任务,当前时间:" + System.currentTimeMillis());
        // 在这里编写你的业务逻辑,例如数据同步、状态检查、发送邮件等
    }

    /**
     * 带参数的任务方法示例
     * @param params 前端传入的参数
     */
    public void doTaskWithParams(String params) {
        System.out.println("执行带参定时任务,接收参数:" + params + ",当前时间:" + System.currentTimeMillis());
        // 根据参数执行不同的业务逻辑
    }
}

2. 在前端管理界面配置定时任务

后端代码准备好之后,你就可以在RuoYi的前端管理页面上配置这个定时任务了。

  1. 访问定时任务页面
    登录RuoYi系统后,在左侧菜单栏依次找到 系统监控 -> 定时任务,点击进入。

  2. 新建任务
    点击页面上的  "新增"  按钮,会弹出一个表单让你填写任务的具体信息

  3. 填写关键任务信息

    • 任务名称:给你的任务起个易于理解的名字,例如"清理临时文件任务"。

    • 任务分组:使用默认分组(如DEFAULT)或根据字典 sys_job_group 选择

    • 调用目标字符串 (最重要) :这是告诉系统调用哪个Bean的哪个方法的关键。

      • 格式为:Bean名称.方法名(参数)

      • 对于上面的例子:

        • 调用无参方法:mySimpleTask.doTaskNoParams
        • 调用带参方法:mySimpleTask.doTaskWithParams('hello world')
    • Cron执行表达式:定义任务执行的时间规则。如果你不熟悉Cron表达式,可以使用网上的 Cron表达式在线生成器 来辅助生成。例如 0 0 2 * * ? 表示每天凌晨2点执行。

    • 其他选项

      • 执行策略:用于处理任务错过执行时间(misfire)的情况,可根据需要选择
      • 并发执行:如果允许多个相同任务同时运行,请开启;否则建议关闭,避免重复执行。
      • 状态:设置为  "正常" ,任务才会被调度执行

3. 测试与管理任务

  • 测试任务:配置完成后,在任务列表找到你新创建的任务,点击  "执行一次"  按钮。然后去检查后端的控制台输出或查看业务逻辑是否执行,从而验证任务是否配置正确。
  • 查看调度日志:在 定时任务 -> 调度日志 中,你可以查看每次任务执行的详细记录,包括成功与否、执行耗时以及可能出现的错误信息,这对于排查问题非常有用。

⚠️ 重要提醒与进阶说明

  • 关于任务类的位置:虽然很多资料建议将任务类放在 ruoyi-quartz 或 ruoyi-job 模块的 task 包下,但在 ruoyi-cloud 版本中,只要你配置了 @Component 注解,并且该类在Spring的组件扫描路径下(通常是在 com.ruoyi 主包或其子包下),它就能被正确识别。
  • 任务逻辑与业务分离:定时任务中通常不编写复杂的业务逻辑。更常见的做法是,在任务方法中通过 @Autowired 注入相应的业务Service,然后调用其方法。或者,你也可以使用 Feign调用 来触发其他微服务中的业务逻辑
  • 关于Class类调用:除了Bean调用,还有一种方式是 Class类调用,格式为 全限定类名.方法名(参数),例如 com.ruoyi.job.task.MySimpleTask.doTaskWithParams('param')。这种方式不需要在类上添加 @Component 注解,但Bean调用更为通用和方便依赖注入。

⚡ 简单任务与Spring原生定时

如果你的任务非常简单,且不需要动态调整执行时间,也可以考虑使用Spring原生的 @Scheduled 注解。

  1. 在启动类上添加 @EnableScheduling 注解

  2. 在任务方法上直接使用 @Scheduled 注解并配置cron表达式。

    java

    @Component
    public class MySpringTask {
        @Scheduled(cron = "0/30 * * * * ?") // 每30秒执行一次
        public void execute() {
            // 任务逻辑
        }
    }
    

    需要注意的是,这种方式创建的任务执行时间固定,无法通过RuoYi的前端界面动态管理。

希望这份详细的指南能帮助你顺利在 ruoyi-cloud 中配置和使用定时任务!如果在实际操作中遇到具体的报错或问题,欢迎随时提出。