1. 初识RuoYi-Geek的定时任务:它是什么,能帮你做什么?
如果你正在用RuoYi-Geek这个框架做项目,肯定遇到过一些需要“定时”去做的活儿。比如,每天凌晨2点清理一下临时文件,每周一早上9点给所有用户发一份运营周报,或者每隔5分钟检查一次订单状态,看看有没有超时未支付的。这些活儿要是全靠人工盯着,那可就太累了,而且容易出错。这时候,框架自带的“定时任务”功能,就是你解放双手、让程序自动跑起来的神器。
简单来说,RuoYi-Geek的定时任务模块,就是一个内置的、功能强大的“任务调度器”。你只需要告诉它两件事:第一,要执行什么任务(调用哪个Bean或Class里的方法);第二,什么时候执行(配置Cron表达式)。剩下的事情,比如到了时间点自动触发、任务执行失败的重试、记录每次执行的日志,框架都帮你包圆了。这个功能对于后台管理类系统来说,几乎是刚需。我最早接触的时候,觉得这玩意儿肯定很复杂,得研究半天Quartz的源码。但实际用下来发现,RuoYi-Geek已经把它封装得非常友好了,你完全不用关心底层调度线程是怎么管理的,只需要关注你的业务逻辑本身。
那么,这个功能最适合谁呢?如果你是RuoYi-Geek的初学者,或者正在开发一个需要周期性处理数据的Web应用,比如电商后台、内容管理系统、数据统计平台,那这个章节就是为你准备的。我会带你从最基础的Bean调用开始,一步步走到灵活的Cron表达式配置,中间穿插我实际踩过的坑和调试技巧,保证你看完就能上手,把定时任务稳稳地跑起来。
2. 环境准备与项目启动:你的第一个定时任务跑起来了吗?
工欲善其事,必先利其器。在开始写代码之前,我们得先把RuoYi-Geek的前后端环境给跑通。别担心,这个过程不复杂,跟着步骤走就行。
首先,你得把代码弄到本地。官方的代码仓库在Gitee上,搜索“Geek-XD”就能找到。用Git克隆下来,或者直接下载ZIP包解压都行。拿到代码后,你会看到清晰的前后端分离目录结构。后端是一个标准的Spring Boot项目,前端则是基于Vue的。
后端启动的关键是数据库。RuoYi-Geek的定时任务信息、执行日志等都是要存到数据库里的。所以,你首先得有一个MySQL数据库(版本5.7或8.0都行)。然后,在后端项目的 resources 目录下,找到 application-druid.yml 这个配置文件(就是原始文章里提到的“图一”那个文件)。这里需要修改三个核心参数:
url:你的数据库连接地址,比如jdbc:mysql://localhost:3306/ry-geek?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8username:你的数据库用户名,通常是root。password:对应用户的密码。
改完之后,你可以先运行一下SQL初始化脚本(一般在 sql 文件夹里),把表结构创建好。然后,直接运行主启动类(通常是 RuoYiApplication),看到控制台打印出启动成功的日志,没有报数据库连接错误,后端就算启动成功了。
前端启动稍微有点小门槛,主要是Node.js环境。你需要先安装Node.js和yarn。安装好之后,打开终端,进入前端项目目录,先运行 yarn install 来安装所有依赖包。这个过程可能会因为网络问题慢一点,耐心等待即可。安装完成后,前端默认运行在80端口,如果你想改端口,可以去 vue.config.js 文件里修改 devServer 下的 port 配置(对应原始文章的“图二”)。最后,运行 yarn run dev,看到编译成功的提示,并且浏览器能正常打开登录页面,前端环境也就准备好了。
当你在浏览器里成功登录进系统,看到左侧菜单栏时,恭喜你,最难的环境搭建部分已经过去了。接下来,我们就可以进入正题,开始“制造”定时任务了。
3. 核心实战:两种调用方式详解(Bean调用 vs. Class类调用)
定时任务的核心逻辑,就是定义“做什么”。RuoYi-Geek提供了两种非常清晰的方式来定义这个逻辑:Bean调用 和 Class类调用。这两种方式没有绝对的优劣,主要看你的使用习惯和项目结构。我用下来,觉得Bean调用更Spring Boot,更符合日常开发直觉;而Class类调用则更直接,适合一些简单的工具类方法。下面我结合代码,给你掰开揉碎了讲。
3.1 Bean调用:最Spring的方式
Bean调用,顾名思义,就是调用Spring容器里管理的一个Bean对象的方法。这是最常用、也是最推荐的方式,因为它能充分利用Spring的依赖注入(DI)特性。比如,你的任务方法里需要用到 @Autowired 进来的Service或者Mapper,用Bean调用就完全没问题。
怎么操作呢?首先,你需要创建一个普通的Spring组件类。在 com.ruoyi.quartz.task 包下(这个包是框架预设的,你也可以自己定义,但建议放在一起好管理),新建一个类,比如叫 MyCustomTask。关键的一步是,给它加上


295

被折叠的 条评论
为什么被折叠?



