C#入坑JAVA 使用XXLJob

xxl-job/doc/XXL-JOB官方文档.md at master · xuxueli/xxl-job (github.com)

定时任务 XXL Job

定时任务的使用场景主要如下:

  • 时间驱动处理场景:每分钟扫描超时支付的订单,活动状态刷新,整点发送优惠券。
  • 批量处理数据:按月批量统计报表数据,批量更新短信状态,实时性要求不高。

年度最佳定时任务:每个月初的工资单的推送!!!

项目基于 XXL Job 实现分布式定时任务,支持动态控制任务的添加、修改、开启、暂停、删除、执行一次等操作。

疑问:为什么使用 XXL-Job 呢?

目前国内开源的 Job 框架,经历过大规模的中大厂的考验,稳定性和功能性都是有保障的,目前可能只有 XXL-Job 和 Elastic-Job 两个选择。

相对来说,XXL-Job 更加轻量级,大家更容易上手。

#1. 如何搭建 XXL Job 调度中心

① 搭建调度中心

② 搭建完成后,需要修改管理后台的 基础设施 -\> 定时任务 菜单,指向你的 XXL-Job 地址。如下图所示:

2. 如何编写 XXL Job 定时任务

友情提示:以 yudao-module-system 服务为例子。

#2.1 引入依赖

yudao-module-system-biz 模块的 pom.xml (opens new window)中,引入 yudao-spring-boot-starter-job 技术组件。如下所示:

复制代码
<dependency>
    <groupId>cn.iocoder.cloud</groupId>
    <artifactId>yudao-spring-boot-starter-job</artifactId>
</dependency>

该组件基于 XXL Job 框架的封装,实现它的 Spring Boot Starter 配置。

#2.2 添加配置

① 在 application.yaml (opens new window)中,添加 xxl.job 配置。如下所示:

复制代码
--- #################### 定时任务相关配置 ####################

xxl:
  job:
    executor:
      appname: ${spring.application.name} # 执行器 AppName
      logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径
    accessToken: default_token # 执行器通讯TOKEN
  • 注意,xxl.job.accessToken 配置,需要改成你的 XXL Job 调度中心的访问令牌。

② 在 application-local.yaml (opens new window)中,添加 xxl.job 配置。如下所示:

复制代码
--- #################### 定时任务相关配置 ####################

xxl:
  job:
    enabled: true # 是否开启调度中心,默认为 true 开启
    admin:
      addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址

③ 在 XXL-Job 的 执行器管理 菜单中,添加该服务作为 XXL-Job 的执行器。如下图所示:

图一

  • AppName:使用服务的 spring.application.name 即可,这个是我们项目所封装和约定的,例如说该服务是 system-server
  • 名称:没有强制要求,此处我们填写"系统服务"
  • 注册方式:使用"自动注册"即可,稍后我们启动该服务后,会看到注册上来

④ 启动该项目的 SystemServerApplication 类,看到如下日志,说明注册成功:

  • 其中,第 2 行的 demoJob 是我们在 yudao-module-system 提供的一个示例 Job。

另外,我们也可以在 XXL-Job 的 任务管理 菜单中,看到注册成功的信息。如下图所示:

2.3 创建 Job 定时任务

友情提示:继续以 module-system 服务为例子。

module-system-biz 模块的 job 包下,我们已经提供了一个 DemoJob 示例,代码如下:

复制代码
@Component
public class DemoJob {

    @XxlJob("demoJob")
    @TenantJob
    public void execute() {
        System.out.println("美滋滋");
    }

}

疑问:为什么 Job 查询数据库时,报多租户的错误?

需要声明 @TenantJob 注解在 Job 类上,实现并行遍历每个租户,执行定时任务的逻辑。

更多多租户的内容,可见 《开发指南 ------ SaaS 多租户》文档。

① 在 XXL-Job 的 任务管理 菜单中,点击 新增 按钮,填写定时任务的信息。如下图所示:

② 点击该任务后的 操作 按钮,选择 执行一次 按钮,执行一次该任务。然后,我们可以在 IDEA 看到 美滋滋 的输出。

如此,我们便完成了一个简单的定时任务的编写。撒花~~~

4. 更多使用教程

可参见 《芋道 Spring Boot 定时任务入门》 文章的「5. 快速入门 XXL-JOB」部分。

常用的 Cron 表达式如下:

复制代码
0 0 10,14,16 * * ? 每天上午 10 点,下午 2 点、4 点 
0 0/30 9-17 * * ? 朝九晚五工作时间内,每半小时 
0 0 12 ? * WED 表示每个星期三中午 12 点 
0 0 12 * * ? 每天中午 12 点触发 
0 15 10 ? * * 每天上午 10:15 触发 
0 15 10 * * ? 每天上午 10:15 触发 
0 15 10 * * ? * 每天上午 10:15 触发 
0 15 10 * * ? 2005 2005 年的每天上午 10:15 触发 
0 * 14 * * ? 在每天下午 2 点到下午 2:59 期间,每 1 分钟触发 
0 0/5 14 * * ? 在每天下午 2 点到下午 2:55 期间,每 5 分钟触发 
0 0/5 14,18 * * ? 在每天下午 2 点到 2:55 期间和下午 6 点到 6:55 期间,每 5 分钟触发 
0 0-5 14 * * ? 在每天下午 2 点到下午 2:05 期间,每 1 分钟触发 
0 10,44 14 ? 3 WED 每年三月的星期三的下午 2:10 和 2:44 触发 
0 15 10 ? * MON-FRI 周一至周五的上午 10:15 触发 
0 15 10 15 * ? 每月15日上午 10:15 触发 
0 15 10 L * ? 每月最后一日的上午 10:15 触发 
0 15 10 ? * 6L 每月的最后一个星期五上午 10:15 触发 
0 15 10 ? * 6L 2002-2005 2002 年至 2005 年,每月的最后一个星期五上午 10:15 触发 
0 15 10 ? * 6#3 每月的第三个星期五上午 10:15 触发

实战

相关推荐
朔北之忘 Clancy14 小时前
2026 年 3 月青少年软编等考 C 语言二级真题解析
c语言·开发语言·c++·学习·青少年编程·题解·考级
云云只是个程序马喽15 小时前
海外短剧系统开发_云微传媒:多语言短剧平台定制与变现解决方案
java·php
plainGeekDev15 小时前
RecyclerView.Adapter → ListAdapter
java·kotlin·gradle
J2虾虾15 小时前
Spring AI Alibaba - 人工介入(Human-in-the-Loop)
java·人工智能·spring
Old Uncle Tom15 小时前
Harness Engineering 综述
java·开发语言·数据库
星原望野15 小时前
JAVA:策略模式的实战使用
java·开发语言·策略模式
码界筑梦坊15 小时前
282-基于Python的豆瓣音乐可视化分析推荐系统
开发语言·python·信息可视化·数据分析·flask·vue
LJianK115 小时前
java多态
java·开发语言·python
_Evan_Yao15 小时前
栈与队列:后进先出与先进先出的智慧
开发语言·python
z落落16 小时前
C# 构造函数(无参/有参/重载/this)+析构函数(终结器)|GC 垃圾回收
java·开发语言·c#