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);
}
}
三、调度中心任务配置
- 登录调度中心:http://localhost:8080/xxl-job-admin
- 新增执行器:
- 执行器名称:
demo-executor - 注册方式:自动注册(若失败可手动指定 IP:PORT)
- 执行器名称:
- 新增任务:
- 任务描述:示例任务
- JobHandler:
demoJobHandler - 调度类型:CRON 表达式(例如
0 * * * * ?每分钟执行一次) - 保存并启动
四、验证与调试
- 查看执行器日志:
- 控制台输出:
XXL-JOB, Hello World. - 日志文件:
/data/applogs/xxl-job/jobhandler/demoJobHandler.log
- 控制台输出:
- 调度中心监控:
- 任务执行记录
- 下次执行时间
- 执行状态(成功/失败)
常见问题解决
-
连接调度中心失败:
- 检查
admin addresses配置是否正确 - 确保防火墙开放 8080 端口
- 检查
-
执行器注册失败:
- 确认执行器端口未被占用
- 手动指定 IP 地址(避免自动获取失败)
-
任务不执行:
- 检查 CRON 表达式是否正确
- 查看调度中心是否有异常日志
扩展功能
- 分片广播 :通过
ShardingUtil实现任务分片 - 动态参数 :在
@XxlJob注解中传递参数 - GLUE模式:在线编辑任务代码(无需重启服务)
通过以上步骤,您可以快速搭建 XXL-JOB 分布式任务调度系统,并在 SpringBoot 项目中无缝集成。