手写SpringBoot项目所使用的xxl-job分布式任务调度平台的starter

要将上述代码抽离成一个独立的 Spring Boot Starter,您需要创建一个新的 Maven 项目,并按照以下步骤进行操作:

  1. 创建 Maven 项目

    • 使用 IDE 或命令行创建一个新的 Maven 项目,命名为 xxl-job-starter(或自定义名称)。
    • 设置项目的 groupId(例如:com.example)、artifactId(例如:xxl-job-starter)和 version
  2. 添加必要的依赖

    • pom.xml 文件中添加 Spring Boot Starter、XXL-JOB 的依赖以及所需的其他库(如 Hutool)。
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.xxl.job</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>{latest_xxjob_version}</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>{latest_hutool_version}</version>
        </dependency>
    </dependencies>
    

    替换 {latest_xxjob_version}{latest_hutool_version} 为相应库的最新版本。

  3. 创建XxlJobAutoConfiguration类

    • 在项目中创建一个名为 XxlJobAutoConfiguration(或自定义名称)的 Java 类,实现与您提供的代码相似的功能。将注释解除并调整代码结构如下:
/*
 * Copyright (c) 2020, 2024, fpl1116.cn All rights reserved.
 *
 */
package cn.fpl.xxljob.autoconfiguration;


import cn.fpl.xxljob.config.XxlJobConfig;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

/**
 * <p>Project: page-starter-demo - PageXAutoConfiguration</p>
 * <p>Powered by fpl1116 On 2024-02-19 16:18:07</p>
 * <p>描述:<p>
 *
 * @author penglei
 * @version 1.0
 * @since 1.8
 */
@Configuration
@Import( {XxlJobConfig.class})
//cn.fpl.pagex.enbale = xxx
@ConditionalOnProperty(prefix = "cn.fpl.xxljob", value = "enable",havingValue="true",matchIfMissing=true)
public class XxlJobAutoConfiguration { //领头羊
}

  1. 创建XxlJobProperties类
/*
 * Copyright (c) 2020, 2024, fpl1116.cn All rights reserved.
 *
 */
package cn.fpl.xxljob.properties;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * <p>Project: page-starter-demo - PageXProperties</p>
 * <p>Powered by fpl1116 On 2024-02-19 16:19:05</p>
 * <p>描述:<p>
 *
 * @author penglei
 * @version 1.0
 * @since 1.8
 */
@Data
@ConfigurationProperties(prefix = "cn.fpl.xxljob")
public class XxlJobProperties {
    private boolean enable = true;

    private String adminAddresses;
    private String accessToken;
    private String appname;
    private String address;
    private String ip;
    private String logPath;
    private Integer logRetentionDays;
}

  1. 创建XxlJobConfig类
/*
 * Copyright (c) 2020, 2024, fpl1116.cn All rights reserved.
 *
 */
package cn.fpl.xxljob.config;

import cn.fpl.xxljob.properties.XxlJobProperties;
import cn.hutool.core.net.NetUtil;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

/**
 * <p>Project: page-starter-demo - XxlJobConfig</p>
 * <p>Powered by fpl1116 On 2024-04-16 14:12:56</p>
 * <p>描述:<p>
 *
 * @author penglei
 * @version 1.0
 * @since 1.8
 */
@Import({XxlJobProperties.class})
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @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.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;


    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appname);
        xxlJobSpringExecutor.setAddress(address);
        xxlJobSpringExecutor.setIp(ip);

        //通过hutool工具获取一个本机可用端口
        int usableLocalPort = NetUtil.getUsableLocalPort();
        xxlJobSpringExecutor.setPort(usableLocalPort);

        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }


}

  1. 创建 starter 的 META-INF 文件夹及 spring.factories 文件
    • 在项目的 src/main/resources 目录下创建 META-INF 文件夹。
    • META-INF 文件夹中创建 spring.factories 文件,内容如下:
  # Auto-configure components
  org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  cn.fpl.xxljob.autoconfiguration.XxlJobAutoConfiguration

这样设置后,当其他项目引入您的 starter 时,XxlJobAutoConfiguration 类会自动被 Spring Boot 加载并应用配置。

  1. 打包发布 starter
    • 在完成上述步骤后,使用 IDE 或 Maven 命令行编译并打包项目(通常是生成 JAR 文件)或直接deploy发布项目到maven配置的私仓。
    • 将生成的 JAR 文件上传至 Maven 私服或公共仓库,以便其他项目通过 Maven 依赖方式引入。

现在,其他 Spring Boot 项目只需在 pom.xml 中添加对您创建的 xxl-job-starter 的依赖,即可自动配置 XXL-JOB。记得在应用的 application.propertiesapplication.yml 文件中设置对应的 XXL-JOB 配置属性。
8. application.properties配置内容

# XXL-JOB 相关配置

# 安装xxl-job服务的ip和端口
xxl.job.admin.addresses=http://localhost:8080/xxl-job-admin
xxl.job.accessToken=my-access-token
xxl.job.executor.appname=my-app
xxl.job.executor.address=
xxl.job.executor.ip=127.0.0.1
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
xxl.job.executor.logretentiondays=30
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐