Ask me anything
Ithy Logo
Sign in to save

使用 IntelliJ IDEA 创建基于 XXL-JOB 的任务调度项目

全面指南:从空白 Maven 项目到功能完备的 XXL-JOB 任务调度系统

xxl job task scheduling

三大关键要点

  • 项目初始化与依赖管理:指导如何在 IntelliJ IDEA 中创建 Maven 项目,并正确配置 XXL-JOB 的依赖。
  • 配置与集成:详细说明如何配置 XXL-JOB 执行器,包括 application.properties 文件和配置类。
  • 任务处理与调度:展示如何创建任务处理类,使用注解标记任务,并通过 XXL-JOB Admin 控制台进行任务调度与管理。

1. 在 IntelliJ IDEA 中创建新的 Maven 项目

步骤概述

首先,使用 IntelliJ IDEA 创建一个空白的 Maven 项目,为接下来的 XXL-JOB 集成打下基础。

详细步骤

  1. 启动 IntelliJ IDEA 并创建新项目:

    • 打开 IntelliJ IDEA,选择 File > New > Project...。
    • 在新项目窗口中,选择 Maven,然后点击 Next。
    • 勾选 Create from archetype,选择 maven-archetype-quickstart 模板。
    • 点击 Next。
    • 填写项目的 GroupId 和 ArtifactId,例如:
      • GroupId: com.example
      • ArtifactId: xxljob-demo
    • 点击 Finish 创建项目。
  2. 项目结构验证:

    确保项目目录结构如下:

    
    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 应用并验证任务执行

  1. 启动 XXL-JOB Admin 控制台:

    • 下载 XXL-JOB Admin 控制台,参见 XXL-JOB GitHub。
    • 配置 application.properties 文件,确保 Admin 控制台正确连接。
    • 运行 Admin 控制台,默认地址为 http://localhost:8080/xxl-job-admin。
  2. 运行 Spring Boot 应用:

    • 在 IntelliJ IDEA 中,运行 XxlJobDemoApplication 类。
    • 应用启动后,XXL-JOB 执行器会自动注册到 Admin 控制台。
  3. 验证任务注册:

    • 访问 XXL-JOB Admin 控制台的 UI 页面。
    • 在控制台中查看已注册的执行器,确保你的 xxl-job-demo 执行器已成功注册。
  4. 创建并调度任务:

    • 在 Admin 控制台中,选择 任务管理 > 新增任务。
    • 填写任务基本信息:
      • 任务名称:例如 Sample Job
      • 执行器:选择 xxl-job-demo
      • 任务 Handler 名称:填写 sampleJobHandler
      • 任务描述:可选,添加任务说明。
      • 调度类型:选择 Cron,并设置 Cron 表达式,如 0/5 * * * * ? 代表每 5 秒执行一次。
    • 保存任务配置。
    • 启动任务,观察任务执行情况。

在任务执行时,你可以在控制台中查看任务执行日志,确保任务按预期运行。


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

AI-assisted research. Sources, methodology and corrections · Source-checked guides and tools · Explore published answers

Ask Ithy AI