使用 IntelliJ IDEA 创建基于 XXL-JOB 的任务调度项目
全面指南:从空白 Maven 项目到功能完备的 XXL-JOB 任务调度系统
三大关键要点
- 项目初始化与依赖管理:指导如何在 IntelliJ IDEA 中创建 Maven 项目,并正确配置 XXL-JOB 的依赖。
- 配置与集成:详细说明如何配置 XXL-JOB 执行器,包括
application.properties文件和配置类。 - 任务处理与调度:展示如何创建任务处理类,使用注解标记任务,并通过 XXL-JOB Admin 控制台进行任务调度与管理。
1. 在 IntelliJ IDEA 中创建新的 Maven 项目
步骤概述
首先,使用 IntelliJ IDEA 创建一个空白的 Maven 项目,为接下来的 XXL-JOB 集成打下基础。
详细步骤
-
启动 IntelliJ IDEA 并创建新项目:
- 打开 IntelliJ IDEA,选择
File>New>Project...。 - 在新项目窗口中,选择
Maven,然后点击Next。 - 勾选
Create from archetype,选择maven-archetype-quickstart模板。 - 点击
Next。 - 填写项目的
GroupId和ArtifactId,例如:GroupId:com.exampleArtifactId:xxljob-demo
- 点击
Finish创建项目。
- 打开 IntelliJ IDEA,选择
-
项目结构验证:
确保项目目录结构如下:
xxljob-demo/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ └── resources/ │ └── test/ │ └── java/ └── pom.xml
2. 配置 pom.xml 文件
添加 XXL-JOB 及其他必要依赖
在 pom.xml 文件中添加 XXL-JOB 核心依赖及 Spring Boot 相关依赖,以便后续集成。
打开 pom.xml,并在 <dependencies> 部分添加以下内容:
4.0.0
com.example
xxljob-demo
0.0.1-SNAPSHOT
org.springframework.boot
spring-boot-starter
2.7.10
com.xuxueli
xxl-job-core
2.4.1
org.springframework.boot
spring-boot-maven-plugin
保存 pom.xml,IntelliJ IDEA 将自动下载并添加依赖。
(参考资料:CSDN 博客 - XXL-JOB 的功能及 IDEA 中的配置, XXL-JOB GitHub)
3. 配置应用属性
编辑 application.properties 文件
在 src/main/resources 目录下创建或修改 application.properties 文件,添加 XXL-JOB 相关配置。
# XXL-JOB Admin 地址(替换为实际地址)
xxl.job.admin.addresses=http://localhost:8080/xxl-job-admin
# 执行器名称
xxl.job.executor.appname=xxl-job-demo
# 执行器地址(留空自动注册)
xxl.job.executor.address=
# 执行器 IP(留空自动获取)
xxl.job.executor.ip=
# 执行器端口
xxl.job.executor.port=9999
# 执行器日志路径
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
# 执行器日志保留天数
xxl.job.executor.logretentiondays=30
这些配置项指明了 XXL-JOB Admin 的地址、执行器名称、IP、端口以及日志存储路径和保留策略。
4. 创建主应用程序类
配置 Spring Boot 应用
创建一个主应用程序类,并配置 XXL-JOB 执行器。
package com.example.xxljobdemo;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class XxlJobDemoApplication {
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.executor.appname}")
private String appName;
@Value("${xxl.job.executor.address}")
private String address;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
public static void main(String[] args) {
SpringApplication.run(XxlJobDemoApplication.class, args);
}
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
XxlJobSpringExecutor executor = new XxlJobSpringExecutor();
executor.setAdminAddresses(adminAddresses);
executor.setAppName(appName);
executor.setAddress(address);
executor.setIp(ip);
executor.setPort(port);
executor.setLogPath(logPath);
executor.setLogRetentionDays(logRetentionDays);
return executor;
}
}
该类通过读取 application.properties 中的配置,初始化并注册 XXL-JOB 执行器。
5. 创建任务处理器
定义具体任务逻辑
在项目中创建任务处理类,使用 @XxlJob 注解标记任务方法。
例如,创建一个名为 SampleJobHandler.java 的类:
package com.example.xxljobdemo.job;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger;
import org.springframework.stereotype.Component;
@Component
public class SampleJobHandler {
@XxlJob("sampleJobHandler")
public void sampleJob() throws Exception {
XxlJobLogger.log("XXL-JOB, Hello World.");
// 任务具体逻辑
// 例如,调用业务服务、处理数据等
System.out.println("This is a demo job!");
}
}
此类中的 sampleJob 方法将作为 XXL-JOB 调度的任务执行器。
(参考资料:华为云开发者 - Spring Boot)
6. 配置 XXL-JOB 执行器
集成到 Spring Boot 应用中
若需将 XXL-JOB 与 Spring Boot 应用程序集成,可通过配置 Bean 的方式实现。
package com.example.xxljobdemo.config;
import org.springframework.context.annotation.Configuration;
import com.xxl.job.core.executor.XxlJobExecutor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
@Configuration
public class XxlJobConfiguration {
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.executor.appname}")
private String appName;
@Value("${xxl.job.executor.address}")
private String address;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobExecutor xxlJobExecutor() {
XxlJobExecutor executor = new XxlJobExecutor();
executor.setAdminAddresses(adminAddresses);
executor.setAppName(appName);
executor.setAddress(address);
executor.setIp(ip);
executor.setPort(port);
executor.setLogPath(logPath);
executor.setLogRetentionDays(logRetentionDays);
return executor;
}
}
该配置类负责初始化 XXL-JOB 执行器,并独立管理其生命周期。
7. 运行和测试项目
启动 Spring Boot 应用并验证任务执行
-
启动 XXL-JOB Admin 控制台:
- 下载 XXL-JOB Admin 控制台,参见 XXL-JOB GitHub。
- 配置
application.properties文件,确保 Admin 控制台正确连接。 - 运行 Admin 控制台,默认地址为
http://localhost:8080/xxl-job-admin。
-
运行 Spring Boot 应用:
- 在 IntelliJ IDEA 中,运行
XxlJobDemoApplication类。 - 应用启动后,XXL-JOB 执行器会自动注册到 Admin 控制台。
- 在 IntelliJ IDEA 中,运行
-
验证任务注册:
- 访问 XXL-JOB Admin 控制台的 UI 页面。
- 在控制台中查看已注册的执行器,确保你的
xxl-job-demo执行器已成功注册。
-
创建并调度任务:
- 在 Admin 控制台中,选择
任务管理>新增任务。 - 填写任务基本信息:
-
任务名称:例如
Sample Job -
执行器:选择
xxl-job-demo -
任务 Handler 名称:填写
sampleJobHandler -
任务描述:可选,添加任务说明。
-
调度类型:选择
Cron,并设置 Cron 表达式,如0/5 * * * * ?代表每 5 秒执行一次。
-
- 保存任务配置。
- 启动任务,观察任务执行情况。
- 在 Admin 控制台中,选择
在任务执行时,你可以在控制台中查看任务执行日志,确保任务按预期运行。
8. 扩展与优化
添加更多任务及功能
根据项目需求,你可以添加更多的任务处理器,配置不同的 Cron 表达式,或实现分片任务等高级功能。
例如,创建一个分片任务:
package com.example.xxljobdemo.job;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.util.XxlJobHelper;
import org.springframework.stereotype.Component;
@Component
public class ShardingJobHandler {
@XxlJob("shardingJobHandler")
public ReturnT shardingJob() throws Exception {
int shardIndex = XxlJobHelper.getShardIndex();
int shardTotal = XxlJobHelper.getShardTotal();
XxlJobLogger.log("分片参数:当前分片序号 = {0}, 总分片数 = {1}", shardIndex, shardTotal);
// 分片任务执行逻辑
for (int i = 0; i < shardTotal; i++) {
if (i == shardIndex) {
XxlJobLogger.log("第 {0} 片, 命中分片开始处理", i);
// 执行分片对应的业务逻辑
} else {
XxlJobLogger.log("第 {0} 片, 忽略", i);
}
}
return ReturnT.SUCCESS;
}
}
在 Admin 控制台中配置相应的分片参数,便可实现复杂的任务调度需求。
(参考资料:CSDN 博客 - 从零搭建 XXL-JOB)
参考资料
Last updated January 10, 2025