xxl-job服务搭建,以及 springboot 集成xxl-job 项目完整步骤示例

XXL-JOB 服务搭建及 SpringBoot 集成完整指南

XXL-JOB 是一个轻量级的分布式任务调度平台,支持可视化的任务管理、执行和监控。以下是 从零开始搭建 XXL-JOB 服务在 SpringBoot 项目中集成 的详细步骤(基于最新稳定版 XXL-JOB 2.3.0)。


一、XXL-JOB 服务搭建

1. 环境准备

  • JDK: 1.8+
  • 数据库: MySQL 5.7+ (存储调度信息)
  • Maven: 3.x+
  • 端口: 确保 9999 端口未被占用(默认执行器端口)

2. 下载 XXL-JOB 源码

bash 复制代码
# 方式1:直接下载 Release 包
https://github.com/XXL-JOB/XXL-JOB/releases

# 方式2:Git clone (推荐)
git clone https://github.com/XXL-JOB/XXL-JOB.git
cd xxl-job

3. 初始化数据库

创建数据库和用户:
sql 复制代码
CREATE DATABASE xxl_job;
CREATE USER 'xxl_job'@'%' IDENTIFIED BY 'xxl_job_password';
GRANT ALL PRIVILEGES ON xxl_job.* TO 'xxl_job'@'%';
FLUSH PRIVILEGES;
导入 SQL 脚本:

进入项目目录 doc/db/,执行:

sql 复制代码
mysql -u root -p xxl_job < doc/db/tables_xxl_job_mysql.sql

4. 配置调度中心(admin)

修改配置文件:xxl-job-admin/src/main/resources/application.properties

properties 复制代码
# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=xxl_job
spring.datasource.password=xxl_job_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# 日志级别调整(可选)
logging.level.root=INFO

5. 启动调度中心

方式1:直接运行 Main Class
  • 主类位置:xxl-job-admin/src/main/java/com/xxl/job/admin/XxlJobAdminApplication.java
  • 右键运行该类的 main() 方法
方式2:打包后运行
bash 复制代码
cd xxl-job-admin
mvn clean package -DskipTests
java -jar target/xxl-job-admin-2.3.0.jar

访问地址:http://localhost:8080/xxl-job-admin

默认账号密码:admin / 123456


二、SpringBoot 集成 XXL-JOB

1. 创建 SpringBoot 项目

使用 start.spring.io 创建项目,添加依赖:

  • Web
  • MyBatis
  • MySQL Driver
  • XXL-JOB Starter(手动添加)

2. 添加 XXL-JOB 依赖

pom.xml 中添加:

xml 复制代码
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.0</version>
</dependency>

3. 配置 XXL-JOB 执行器

application.yml 中添加配置:

yaml 复制代码
xxl:
  job:
    admin:
      addresses: http://localhost:8080/xxl-job-admin # 调度中心地址
    executor:
      appname: demo-executor          # 执行器名称
      address: ""                     # 留空自动注册
      ip: ""                          # 自动获取本机IP
      port: 9999                      # 执行器端口
      logpath: /data/applogs/xxl-job   # 日志路径
      logretentiondays: 30            # 日志保留天数

4. 编写任务代码

创建任务类:
java 复制代码
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;

@Component
public class DemoJobHandler {

    @XxlJob("demoJobHandler") // 任务标识(需与调度中心创建时一致)
    public void execute() {
        System.out.println("XXL-JOB, Hello World.");
        // 业务逻辑...
    }
}

5. 启动执行器

在 SpringBoot 启动类添加注解:

java 复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient // 如果需要服务发现(如 Nacos)
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

三、调度中心任务配置

  1. 登录调度中心:http://localhost:8080/xxl-job-admin
  2. 新增执行器:
    • 执行器名称:demo-executor
    • 注册方式:自动注册(若失败可手动指定 IP:PORT)
  3. 新增任务:
    • 任务描述:示例任务
    • JobHandler:demoJobHandler
    • 调度类型:CRON 表达式(例如 0 * * * * ? 每分钟执行一次)
    • 保存并启动

四、验证与调试

  1. 查看执行器日志:
    • 控制台输出:XXL-JOB, Hello World.
    • 日志文件:/data/applogs/xxl-job/jobhandler/demoJobHandler.log
  2. 调度中心监控:
    • 任务执行记录
    • 下次执行时间
    • 执行状态(成功/失败)

常见问题解决

  1. 连接调度中心失败

    • 检查 admin addresses 配置是否正确
    • 确保防火墙开放 8080 端口
  2. 执行器注册失败

    • 确认执行器端口未被占用
    • 手动指定 IP 地址(避免自动获取失败)
  3. 任务不执行

    • 检查 CRON 表达式是否正确
    • 查看调度中心是否有异常日志

扩展功能

  • 分片广播 :通过 ShardingUtil 实现任务分片
  • 动态参数 :在 @XxlJob 注解中传递参数
  • GLUE模式:在线编辑任务代码(无需重启服务)

通过以上步骤,您可以快速搭建 XXL-JOB 分布式任务调度系统,并在 SpringBoot 项目中无缝集成。

相关推荐
難釋懷1 天前
分布式锁的原子性问题
分布式
Hello.Reader1 天前
Rocket Fairings 实战把全局能力做成“结构化中间件”
中间件·rust·rocket
ai_xiaogui1 天前
【开源前瞻】从“咸鱼”到“超级个体”:谈谈 Panelai 分布式子服务器管理系统的设计架构与 UI 演进
服务器·分布式·架构·分布式架构·panelai·开源面板·ai工具开发
凯子坚持 c1 天前
如何基于 CANN 原生能力,构建一个支持 QoS 感知的 LLM 推理调度器
分布式
飞升不如收破烂~1 天前
Redis 分布式锁+接口幂等性使用+当下流行的限流方案「落地实操」+用户连续点击两下按钮的解决方案自用总结
数据库·redis·分布式
无心水1 天前
分布式定时任务与SELECT FOR UPDATE:从致命陷阱到优雅解决方案(实战案例+架构演进)
服务器·人工智能·分布式·后端·spring·架构·wpf
Lansonli1 天前
大数据Spark(八十):Action行动算子fold和aggregate使用案例
大数据·分布式·spark
invicinble1 天前
对于分布式的原子能力
分布式
心态还需努力呀2 天前
CANN仓库通信库:分布式训练的梯度压缩技术
分布式·cann