相关推荐recommended
XXL-Job的搭建&接入Springboot项目(详细)
作者:mmseoamin日期:2024-04-01

一、XXL-Job介绍

XXL-Job 是一款开源的分布式任务调度平台,由 Xuxueli(徐雪里)开发。它基于 Java 技术栈,提供了一套简单易用、高可靠性的任务调度解决方案。

XXL-Job 的主要作用是帮助开发者实现定时任务的调度和执行。它可以用于定时执行各种类型的任务,例如定时生成报表、定时发送邮件、定时清理数据等。通过 XXL-Job,开发者可以非常方便地管理和监控任务的执行情况,实现任务的自动化调度。

XXL-Job 提供了一个可视化的任务管理界面,可以进行任务的创建、编辑、删除和暂停等操作。同时,它还支持任务的分片并行执行,提高任务的处理效率。XXL-Job 还提供了丰富的任务调度配置选项,如定时触发、CRON 表达式、间隔触发等,满足不同任务调度需求。

除了任务调度功能,XXL-Job 还提供了任务日志记录和报警功能。它可以将任务的执行日志记录下来,方便排查问题和分析任务执行情况。同时,XXL-Job 还支持邮件、钉钉等方式的报警通知,及时告知任务执行异常或失败的情况。

总结来说,XXL-Job 是一款功能强大的分布式任务调度平台,可以帮助开发者实现定时任务的调度和执行。它提供了任务管理、任务调度配置、任务日志记录和报警等功能,方便开发者进行任务的管理和监控。

官网地址

分布式任务调度平台XXL-JOB

这个上面有关于xxl-job的详细介绍和各个功能说明。有需要的可自行去了解官方提供的文档。

XXL-Job的搭建&接入Springboot项目(详细),第1张

系统架构图

XXL-Job的搭建&接入Springboot项目(详细),第2张

调度中心作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。

执行器作用:负责接收“调度中心”的调度并执行。

二、下载xxl-job

1.环境准备

  • Maven3+
  • Jdk1.8+
  • Mysql5.7+

    2.源码仓库地址

    githup:

    https://github.com/xuxueli/xxl-job

    Gitee:

    xxl-job: 一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

    GitCode:

    GitCode - 开发者的代码家园

    3.中央仓库地址

    目前最新的版本是2.4.1

        
        
            com.xuxueli
            xxl-job-core
            ${最新稳定版本}
        

    三、快速入门

    1.拉取代码

    XXL-Job的搭建&接入Springboot项目(详细),第3张

    XXL-Job的搭建&接入Springboot项目(详细),第4张

    拉取下来的目录结构如下:

    XXL-Job的搭建&接入Springboot项目(详细),第5张

    xxl-job-admin:调度中心

    xxl-job-core:公共依赖

    xxl-job-executor-samples:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)

        :xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器,推荐这种方式;

        :xxl-job-executor-sample-frameless:无框架版本;

    2.初始化调度数据库

    XXL-Job的搭建&接入Springboot项目(详细),第6张

    将tables_xxl_job.sql文件导入到我们数据库中,表结构如下:

    XXL-Job的搭建&接入Springboot项目(详细),第7张

    3.配置部署调度中心

    调度中心项目:xxl-job-admin

    作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台

     调度中心配置文件地址:

       /xxl-job/xxl-job-admin/src/main/resources/application.properties

    调度中心配置内容说明:

        ### 调度中心JDBC链接:链接地址请保持和 2.1章节 所创建的调度数据库的地址一致
        spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
        spring.datasource.username=root
        spring.datasource.password=root_pwd
        spring.datasource.driver-class-name=com.mysql.jdbc.Driver
        ### 报警邮箱
        spring.mail.host=smtp.qq.com
        spring.mail.port=25
        spring.mail.username=xxx@qq.com
        spring.mail.password=xxx
        spring.mail.properties.mail.smtp.auth=true
        spring.mail.properties.mail.smtp.starttls.enable=true
        spring.mail.properties.mail.smtp.starttls.required=true
        spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
        ### 调度中心通讯TOKEN [选填]:非空时启用;
        xxl.job.accessToken=
        ### 调度中心国际化配置 [必填]: 默认为 "zh_CN"/中文简体, 可选范围为 "zh_CN"/中文简体, "zh_TC"/中文繁体 and "en"/英文;
        xxl.job.i18n=zh_CN
        ## 调度线程池最大线程配置【必填】
        xxl.job.triggerpool.fast.max=200
        xxl.job.triggerpool.slow.max=100
        ### 调度中心日志表数据保存天数 [必填]:过期日志自动清理;限制大于等于7时生效,否则, 如-1,关闭自动清理功能;
        xxl.job.logretentiondays=30

    想让调度中心运行起来,最主要就是先配置好调度中心的JDBC的连接信息。

    配置完成之后,尝试启动:调度中心(XxlJobAdminApplication)默认端口:8080,前缀是/xxl-job-admin

    XXL-Job的搭建&接入Springboot项目(详细),第8张

    4.调度中心访问地址:http://localhost:8080/xxl-job-admin

    初始账号密码:admin/123456

    XXL-Job的搭建&接入Springboot项目(详细),第9张

    XXL-Job的搭建&接入Springboot项目(详细),第10张

    到此调度中心配置完成。

    4.配置执行器项目

    以xxl-job提供的整合springboot项目为例

    步骤一:maven依赖

    确认pom文件中引入了 “xxl-job-core” 的maven依赖;version可写具体的版本号

    
                com.xuxueli
                xxl-job-core
                ${project.parent.version}
            
    步骤二:执行器配置

     springboot配置文件: /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/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
    步骤三:执行器组件配置

       执行器组件位置: /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java

    配置内容说明:组件配置类直接可用,需要和上面执行器配置文件application.properties中的配置路径需要保持一致

    package com.xxl.job.executor.core.config;
    import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    /**
     * xxl-job config
     *
     * @author xuxueli 2017-04-28
     */
    @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、引入依赖:
         *          
         *             org.springframework.cloud
         *             spring-cloud-commons
         *             ${version}
         *         
         *
         *      2、配置文件,或者容器启动变量
         *          spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
         *
         *      3、获取IP
         *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
         */
    }
    步骤四:启动执行器项目

    举例:用xxl-job提供的先测试,启动:XxlJobExecutorApplication

    XXL-Job的搭建&接入Springboot项目(详细),第11张

    四、开发第一个xxl-job任务

    以xxl-job提供的springboot示例代码为例。

    步骤一:新建执行器

    这两个地方需要保持一致,不然自动注册的时候找到不到OnLine机器地址

    错误信息是:RROR c.x.job.core.util.XxlJobRemotingUtil - Connection refused: connect

    XXL-Job的搭建&接入Springboot项目(详细),第12张

    XXL-Job的搭建&接入Springboot项目(详细),第13张

    步骤二: 新建任务
    1.运行模式BEAN

    客户端:

    XXL-Job的搭建&接入Springboot项目(详细),第14张

    2.代码端:

    XXL-Job的搭建&接入Springboot项目(详细),第15张 2.运行模式(GLUE)

     ( “GLUE模式(Java)” 运行模式的任务实际上是一段继承自IJobHandler的Java类代码,它在执行器项目中运行,可使用@Resource/@Autowire注入执行器里中的其他服务

    XXL-Job的搭建&接入Springboot项目(详细),第16张

    XXL-Job的搭建&接入Springboot项目(详细),第17张

    这个就可以直接在xxl-job编写代码实现定时任务。

    XXL-Job的搭建&接入Springboot项目(详细),第18张

    步骤三:手动执行

    XXL-Job的搭建&接入Springboot项目(详细),第19张

    步骤四、查看日志

    XXL-Job的搭建&接入Springboot项目(详细),第20张

    XXL-Job的搭建&接入Springboot项目(详细),第21张 请点击任务右侧 “日志” 按钮,可前往任务日志界面查看任务日志。

    XXL-Job的搭建&接入Springboot项目(详细),第22张 到此xxl-job提供给我们的代码结束。

    五、整合spring boot项目

    步骤一:引入依赖xxl-job

    XXL-Job的搭建&接入Springboot项目(详细),第23张

    步骤二:执行器配置

    配置我们自己springboot项目的 配置文件 application.xxxx

    XXL-Job的搭建&接入Springboot项目(详细),第24张

    步骤三:执行器组件配置

    可以将将示例的 XxlJobConfig copy到我们的项目中

    @Configuration
    @Slf4j
    public class XxlJobConfig {
        @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() {
            log.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;
        }
    }

     步骤四:编写自己的调度任务

    @Component
    public class SampleXxlJob {
        @XxlJob(value = "test")
        public void myJob() {
            String jobParam = XxlJobHelper.getJobParam();
            System.out.println("myJob,任务调用成功,耶耶耶耶耶"+jobParam);
            XxlJobHelper.handleSuccess("调度任务成功");
        }
    }

    启动我们自己的springboot项目 。

      步骤五:客户端新建执行器

    XXL-Job的搭建&接入Springboot项目(详细),第25张

       步骤六:客户端新建任务

    XXL-Job的搭建&接入Springboot项目(详细),第26张

    XXL-Job的搭建&接入Springboot项目(详细),第27张

      步骤七:定时执行(一分钟一次)

    XXL-Job的搭建&接入Springboot项目(详细),第28张

      步骤七:查看日志

    XXL-Job的搭建&接入Springboot项目(详细),第29张

    XXL-Job的搭建&接入Springboot项目(详细),第30张

    看日志输出,说明在自己的springboot项目中 xxl-job任务接入成功,之后就可以按需定义定时任务。xxl-job目前还有很多功能都还未演示,大家有需要可去xxl-job官网文档了解更多信息。