行业资讯 2025年08月6日
0 收藏 0 点赞 110 浏览 5419 个字
摘要 :

文章目录 第1步:配置调度中心 第2步:SpringBoot集成整合xxl–job 2.1:准备一个springboot项目 2.2:maven依赖 2.3 执行器配置 2.4 执行器组件配置 2.3 :执行……




  • 第1步:配置调度中心
  • 第2步:SpringBoot集成整合xxljob
    • 2.1:准备一个springboot项目
    • 2.2:maven依赖
    • 2.3 执行器配置
      • 2.4 执行器组件配置
    • 2.3 :执行器集群(可选):
  • 第3步:开发第一个任务
    • 3.1 BEAN模式(类形式)
      • 步骤1:执行器项目中,开发Job类:
      • 步骤2:调度中心,新建调度任务
    • 3.2 BEAN模式(方法形式)
      • 步骤1:执行器项目中,开发Job方法:
      • 步骤2:调度中心,新建调度任务
      • 步骤3:手工执行一次
  • 其他执行模式
  • 总结

本文重点讲解SpringBoot如何集成整合xxl-job任务调度框架,上一小节我们讲了《如何快速搭建xxl-job项目详解》,本节我们主要来继续讲下如何将xxl-job的执行器项目集成整合到我们自己的springboot项目中,其实就是在我们springboot项目中配置自定义的执行器,让我们来一起看下吧!

第1步:配置调度中心

首先你要配置xxl-job的调度中心,这个在上一节文章第2步和第3步中讲过,要先准备好初始化SQL和部署好xxl-job-admin项目,这样我们可以可视化操作,如果没有配置好的,先看上一节内容去部署好。

第2步:SpringBoot集成整合xxl-job

接下来,我们开始步入正题,在我们的springboot项目中集成xxl-job。

2.1:准备一个springboot项目

这个就不详细展开了,想必大家都会创建。

2.2:maven依赖

在springboot项目pom文件中引入了 “xxl-job-core” 的maven依赖,这里我引入的是2.4.0版本:

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.4.0</version>
</dependency>

2.3 执行器配置

在项目application.properties配置文件中,对执行器进行配置,配置内容及说明如下:

### 调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行\"执行器心跳注册\"和\"任务结果回调\";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 执行器通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=
### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=xxl-job-executor-sample
### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
xxl.job.executor.address=
### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 \"执行器注册\" 和 \"调度中心请求并触发任务\";
xxl.job.executor.ip=
### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=9999
### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
xxl.job.executor.logretentiondays=30

2.4 执行器组件配置

执行器组件配置文件大家其实可以参考源码中的xxl-job-executor-springboot项目,我们在自己项目新建config包,然后新建名为XxlJobConfig的配置类:

@Configuration
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.port}\")
    private int port;

    @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);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }

    /**
     * 针对多网卡、容器内部署等情况,可借助 \"spring-cloud-commons\" 提供的 \"InetUtils\" 组件灵活定制注册IP;
     *
     *      1、引入依赖:
     *          <dependency>
     *             <groupId>org.springframework.cloud</groupId>
     *             <artifactId>spring-cloud-commons</artifactId>
     *             <version>${version}</version>
     *         </dependency>
     *
     *      2、配置文件,或者容器启动变量
     *          spring.cloud.inetutils.preferred-networks: \'xxx.xxx.xxx.\'
     *
     *      3、获取IP
     *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
     */
}

至此“执行器”项目已经部署结束。

2.3 :执行器集群(可选):

执行器支持集群部署,提升调度系统可用性,同时提升任务处理能力。

执行器集群部署时,几点要求和建议:

  • 执行器回调地址(xxl.job.admin.addresses)需要保持一致;执行器根据该配置进行执行器自动注册等操作。
  • 同一个执行器集群内AppName(xxl.job.executor.appname)需要保持一致;调度中心根据该配置动态发现不同集群的在线执行器列表。

第3步:开发第一个任务

xxl-job支持多种模式来创建定时任务,比如GLUE模式、Bean模式任务等,其中Bean模式任务又支持类形式和方法形式,这里我们来演示一下:

3.1 BEAN模式(类形式)

Bean模式任务,支持基于类的开发方式,每个任务对应一个Java类。

  • 优点:不限制项目环境,兼容性好。即使是无框架项目,如main方法直接启动的项目也可以提供支持,可以参考示例项目 “xxl-job-executor-sample-frameless”;
  • 缺点:
    • 每个任务需要占用一个Java类,造成类的浪费;
    • 不支持自动扫描任务并注入到执行器容器,需要手动注入。

步骤1:执行器项目中,开发Job类:

1、开发一个继承自”com.xxl.job.core.handler.IJobHandler”的JobHandler类,实现其中任务方法。比如我这里新建BeanClassJobHandler:

import com.xxl.job.core.handler.IJobHandler;

public class BeanClassJobHandler extends IJobHandler {
    @Override
    public void execute() throws Exception {
        System.out.println(\"hello www.panziye.com\");
    }
}

2、手动通过如下方式注入到执行器容器。

XxlJobExecutor.registJobHandler(\"beanClassJobHandler\", new BeanClassJobHandler());

步骤2:调度中心,新建调度任务

后续步骤和 “3.2 BEAN模式(方法形式)”一致,可以看下面参考。

3.2 BEAN模式(方法形式)

Bean模式任务,支持基于方法的开发方式,每个任务对应一个方法。

  • 优点:
    • 每个任务只需要开发一个方法,并添加”@XxlJob”注解即可,更加方便、快速。
    • 支持自动扫描任务并注入到执行器容器。
  • 缺点:要求Spring容器环境;

基于方法开发的任务,底层会生成JobHandler代理,和基于类的方式一样,任务也会以JobHandler的形式存在于执行器任务容器中。

步骤1:执行器项目中,开发Job方法:

1、任务开发:在Spring Bean实例中,开发Job方法;

2、注解配置:为Job方法添加注解 “@XxlJob(value=”自定义jobhandler名称”, init = “JobHandler初始化方法”, destroy = “JobHandler销毁方法”)”,注解value值对应的是调度中心新建任务的JobHandler属性的值。

3、执行日志:需要通过 “XxlJobHelper.log” 打印执行日志;

4、任务结果:默认任务结果为 “成功” 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 “XxlJobHelper.handleFail/handleSuccess” 自主设置任务结果;

比如潘老师这里开发如下任务:

@Component
public class BeanMethodJobHandler {
    private static Logger logger = LoggerFactory.getLogger(BeanMethodJobHandler.class);


    /**
     * 1、简单任务示例(Bean模式)
     */
    @XxlJob(\"testJobHandler\")
    public void testJobHandler() throws Exception {
        XxlJobHelper.log(\"XXL-JOB, Hello www.panziye.com.\");

        for (int i = 0; i < 5; i++) {
            XxlJobHelper.log(\"beat at:\" + i);
            TimeUnit.SECONDS.sleep(2);
        }
        // default success
    }
}

步骤2:调度中心,新建调度任务

在任务调度页面中新建的任务进行参数配置,运行模式选中 “BEAN模式”,JobHandler属性填写任务注解“@XxlJob”中定义的值;SpringBoot如何集成整合xxl-job任务调度框架

步骤3:手工执行一次

接下来我们手工执行一下该任务,如下图:SpringBoot如何集成整合xxl-job任务调度框架

注意:如果你要定时执行,你就点击启动即可,当然你也可以编辑和删除,可以轻松可视化控制任务。

然后查看执行日志发现成功执行了:SpringBoot如何集成整合xxl-job任务调度框架

其他执行模式

还有一种执行模式更加简单,可以不用写job类,直接在调度中心页面可视化编辑发布任务,也就是GLUE模式,支持Java、Python、Shell等等,这里就不展开讲解了,有兴趣直接去看xxl-job官方文档吧!

总结

以上就是SpringBoot如何集成整合xxl-job任务调度框架的全部内容,希望对你有帮助哦,欢迎长期关注潘子夜个人博客(https://www.panziye.com),学习愉快哦!

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9810.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号