为什么使用
关于定时任务,各种框架层次不穷,但通过对比最终一句话总结:xxl-job 配置更简单,且功能更强大。所以这就是我们使用它的原因,而接下来以快速上手为例,不做太多其他功能讲解,只为快速使用开发
开始工作
- 首先从官网中直接下载整个工程的 zip 压缩包
- Gitee 地址:https://gitee.com/xuxueli0323/xxl-job
- Github 地址 : https://github.com/xuxueli/xxl-job/
- 解压文件后,进入文件目录 doc → db 获取 tables_xxl_job.sql 文件在数据库中进行执行,该文件会自动创建工程所依赖的 xxl_job 数据库及相关表
工程结构
- xxl-job-admin:可以看作管理各个任务的管理器,类似于微服务中的Nacos(服务注册中心)
- xxl-job-core :公共依赖部分 (暂时忽略)
- xxl-job-executor-samples :该模块下存放着俩个可以直接运行的模板
xxl-job-executor-sample-frameless:传统的执行程序
xxl-job-executor-sample-springboot:整合了 SpringBoot 的程序(推荐)
接下来我们以整合了 SpringBoot 的模板中进行操作,主要操作的文件如图所示
如何编写
这里我们主要讲解 Bean 模式的编写,该模式可以通过 @XxlJob("任务名称") 将每个自定义方法变成我们需要执行的任务,有点类似于 MVC 中的 @RequestMapping 将每个方法变成对应前端请求的控制器一样。
@Component
public class SampleXxlJob {
int time = 0; //记录执行次数
//定义一个名为 TaskDemo 的定时任务
@XxlJob("TaskDemo")
public void TaskDemo() throws Exception {
// XxlJobHelper.log 方法可以将方法中的内容输出到前台日志进行查看
System.out.println("TaskDemo 开始执行第" + time + "次"); //控制台输出
XxlJobHelper.log("TaskDemo 开始执行第" + time + "次"); //日志输出
System.out.println("----------------------------------------");
time++;
}
}
进入后台
- 首先进入到 xxl-job-admin 模块下更改 application.properties 文件中数据库地址的配置内容 (注意这里要链接运行过 tables_xxl_job.sql 文件,或者存在该文件中所创建的表的数据库)
### xxl-job, datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
- 接着在后台启动 xxl-job-admin 模块,在浏览器中输入默认地址 http://localhost:8080/xxl-job-admin/toLogin
用户名 admin (默认)
密码 123456 (默认) - 主要导航功能如图所示
- 在 <运行报表> 中,它会记录配置好的任务个数,不管启动没启动
- 点击 <任务管理>,可以看到有一个默认的任务配置,点击 <新增> 按钮,将我们自己编写的任务配置进去,具体配置如图所示
特别强调,JobHandle 中填写的是我们在 @XxlJob 注解中所对应的值,用来确定我们想要调用的方法, 红色的为必选项,其他的有就填写,没有就默认
其中 Cron 是一种专门设置时间的表达式,大家感兴趣可以学一学,也可以直接点击按照里面的选项进行选择,添加后就会多一个定时任务
启动定时任务
- 进入到刚刚我们编写的 xxl-job-executor-sample-springboot 模块,启动工程。
- 进入到后台,点击 <操作>,如果点击 <启动一次>,那么编写的方法只会执行一次,且我们设置的 Cron 时间条件也会失效,点击 <启动> 则按照我们配置好的运行
控制台结果如图所示
- 点击 <调度日志> 可以看到任务每执行一次就会生成一个日志记录,点击 <操作> 再点击 <执行日志> 可以看到我们输入到日志当中的内容,特别要说明的是,如果我们的程序出现异常,异常信息将输出到日志当中,并不会返回到控制台。 这个是默认的,我们并没有进行配置
- 日志内容如图所示
这就是一个简单的基于 XXL-JOB 的定时示例,更多详细配置大家可以看官网,文档写的非常清楚
我是 Haoo ,编程界的沈腾,撰写有趣的文章。
如果这篇文章帮助到你,请收藏⭐点赞加关注,跟踪不迷路(◡‿◡)