xxl-job架构图-分片任务原理,与springboot整合说明

术语对照

术语 含义 数量
调度中心 XXL-Job Admin 服务,负责任务配置、触发调度、监控管理 1 个
执行器 你的 SpringBoot 应用,集成 xxl-job-core 客户端 1 个应用
实例 执行器的具体进程,一个 JVM 进程 N 个
分片 任务拆分的数据切片,每个实例处理一份 = 实例数

核心关系

复制代码
调度中心 (1 个)
    │
    └── 管理执行器应用 (按 appname 识别)
            │
            └── 包含 N 个实例 (按执行器地址区分)
                    │
                    └── N = 分片数

架构图

复制代码
┌─────────────────────────────────────────────────────────────────────────┐
│  【主】调度中心 (xxl-job-admin)                                          │
│   职责: 配置任务 → 触发调度 → 查询在线实例数 N → 广播任务给 N 个实例       │
│   地址: http://localhost:7070/xxl-job-admin                                            │
└─────────────────────────────────────────────────────────────────────────┘
                                    │
                                    │ 1. 心跳注册 (每 30 秒)
                                    │ 2. 任务调度 (按 Cron 触发)
                                    ▼
┌─────────────────────────────────────────────────────────────────────────┐
│  【次】执行器集群 (你的 SpringBoot 应用)                                   │
│                                                                         │
│   应用名: `repayment-executor`  ← 所有实例相同,用于分组识别                │
│                                                                         │
│   ┌─────────────┐    ┌─────────────┐    ┌─────────────┐                │
│   │  【实例-1】  │    │  【实例-2】  │    │  【实例-N】  │                │
│   │             │    │             │    │             │                │
│   │ 地址: 127.0.0.1:9999 │ 地址: 127.0.0.1:9998 │ 地址: 127.0.0.1:9997 │                │
│   │ JVM 进程-1  │    │ JVM 进程-2  │    │ JVM 进程-N  │                │
│   │             │    │             │    │             │                │
│   │ 注册后获得:  │    │ 注册后获得:  │    │ 注册后获得:  │                │
│   │ total = N   │    │ total = N   │    │ total = N   │                │
│   │ index = 0   │    │ index = 1   │    │ index = N-1 │                │
│   │             │    │             │    │             │                │
│   │ 执行 SQL:    │    │ 执行 SQL:    │    │ 执行 SQL:    │                │
│   │ MOD(uid,N)=0│    │ MOD(uid,N)=1│    │ MOD(uid,N)=N-1│               │
│   └──────┬──────┘    └──────┬──────┘    └──────┬──────┘                │
│          │                  │                  │                          │
│          └──────────────────┼──────────────────┘                          │
│                             │                                             │
│                             ▼ 并行处理                                      │
│                    ┌─────────────────┐                                    │
│                    │   数据库表数据    │                                    │
│                    │  被切成 N 份并行处理 │                                   │
│                    └─────────────────┘                                    │
│                                                                           │
│   【关键】启动几个 SpringBoot 实例 = 分几片 = 并行度                        │
│                                                                           │
└─────────────────────────────────────────────────────────────────────────┘

配置速查

调度中心配置
配置项 说明
执行器管理 repayment-executor 自动注册,等待实例上报
任务管理 → 路由策略 分片广播 关键!触发分片机制
任务管理 → JobHandler repaymentShardingHandler @XxlJob 对应
任务管理 → Cron 0 0 2 * * ? 每天凌晨 2 点执行
执行器配置 (application.properties)
复制代码
# 所有实例相同
xxl.job.appname=repayment-executor
xxl.job.admin.addresses=http://localhost:7070/xxl-job-admin

# 每个实例不同 (9999, 9998, 9997...)
xxl.job.executor.port=9999
启动多个实例
复制代码
# 实例 1
java -jar app.jar --xxl.job.executor.port=9999

# 实例 2  
java -jar app.jar --xxl.job.executor.port=9998

# 实例 3
java -jar app.jar --xxl.job.executor.port=9997
代码中获取分片参数
复制代码
@XxlJob("repaymentShardingHandler")
public ReturnT<String> execute() {
    int total = XxlJobHelper.getShardTotal();   // N (总实例数)
    int index = XxlJobHelper.getShardIndex();   // 0 ~ N-1 (当前实例序号)
    
    // 业务处理...
    return ReturnT.SUCCESS;
}
SQL 分片过滤
复制代码
SELECT * FROM repayment_plan
WHERE repayment_date = #{date}
  AND MOD(user_id, #{total}) = #{index}

核心结论

分片数 = 在线执行器实例数 = 你启动的 SpringBoot 进程数

操作 结果
启动 2 个 SpringBoot 分片数 = 2
启动 3 个 SpringBoot 分片数 = 3
运行中动态加 1 个 下次调度自动识别为 N+1
运行中挂掉 1 个 下次调度自动识别为 N-1
相关推荐
专注写bug23 天前
XxlJob——魔改使用一个注解实现定时任务自动创建
xxljob
瑶山2 个月前
Spring Cloud微服务搭建三、分布式任务调度XXL-JOB
java·spring cloud·微服务·xxljob
闫小甲8 个月前
jobrunr xxljob 怎么选?
springboot·xxljob·jobrunr
seasugar1 年前
xxljob
xxljob
LXMXHJ2 年前
Jenkins-zookeeper-docker-xxljob-rancher
docker·zookeeper·jenkins·rancher·xxljob
鬼钺魂2 年前
集成xxljob项目如何迁移到K8S
java·kubernetes·xxljob
way_more2 年前
XXL-Job详解(一):组件架构
java·spring boot·spring·xxljob
软件科学研究院2 年前
xxl-job项目集成实战,全自动项目集成,可以直接使用到项目中
定时器·xxl-job·xxljob·分布式任务·xxl job·xxl job项目实战
爪蛙毁一生3 年前
java面试题-微服务面试题
java·开发语言·微服务·面试·xxljob