SpringBoot 项目整合xxl-job

SpringBoot 项目整合xxl-job

码农世界 2024-06-04 后端 92 次浏览 0个评论

一、简介

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。要想在SpringBoot 项目中接入到XXL-JOB中进行分布式定时任务处理,可以参考官方文档: https://www.xuxueli.com/xxl-job/

二、下载并部署调度中心

2.1 下载源码

gitee源码链接: http://gitee.com/xuxueli0323/xxl-job

源码的基本模块如下:

  • xxl-job-admin:调度中心
  • xxl-job-core:公共依赖
  • xxl-job-executor-samples:执行器Sample示例
    2.2 初始化“调度数据库”

    在项目源码目录获取 “调度数据库初始化SQL脚本” 并执行,调度中心支持集群部署,集群情况下各节点务必连接同一个mysql实例。如果mysql做主从,调度中心集群节点务必强制走主库。脚本位置:/xxl-job/doc/db/tables_xxl_job.sql。

    SpringBoot 项目整合xxl-job

    2.3 配置“调度中心”

    调度中心配置文件地址:/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
    
    2.4 部署项目

    如果已经正确进行上述配置,可将项目编译打包部署。

    调度中心访问地址:http://localhost:8080/xxl-job-admin (该地址执行器将会使用到,作为回调地址)。默认登录账号: “admin/123456”, 登录后运行界面如下图所示。

    SpringBoot 项目整合xxl-job

    三、改造要整合xxl-job的SpringBoot项目

    3.1 引入xxl-job相关maven依赖

    在项目的pom.xml文件中添加xxl-job-core依赖:

    
        com.xuxueli
        xxl-job-core
        ${xxljob.version}
    
    
    3.2 配置调度中心地址

    在项目的yaml配置文件中添加xxl-job相关配置信息:

    xxl:
      job:
        accessToken: 
        admin:
          # 调度中心服务地址
          addresses: http://localhost:8080/xxl-job-admin
        executor:
          # 执行器名称,必须唯一,与调度中心的执行器管理中的AppName保存一致
          appname: jobHandle
          #可空,读取物理网卡第一个IP
          ip: 
          # 调度通道监听端口,建议都在9900~9999之间
          port: 9998  
          # job执行的日志目录
          logpath: /home/mbApp/billbook/log/xxljob
          # 日志滚动天数  -1 不限制
          logretentiondays: -1
    
    3.3 创建配置类

    在项目中新建一个xxl-job的配置类,用于读取上述配置,并配置好执行器实例。

    @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.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.setAccessToken(accessToken);
            xxlJobSpringExecutor.setAppname(appname);
            xxlJobSpringExecutor.setIp(ip);
            xxlJobSpringExecutor.setPort(port);
            xxlJobSpringExecutor.setAccessToken(accessToken);
            xxlJobSpringExecutor.setLogPath(logPath);
            xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
            return xxlJobSpringExecutor;
        }
    }
    
    3.4 到调度中心新建执行器

    进入到xxl-job的调度中心,选择执行器管理,点击新增按钮添加一个执行器,添加执行器时需要保证添加在执行器的AppName与上面yaml配置文件中的appname保持一致。

    SpringBoot 项目整合xxl-job

    3.5 重启客户端项目

    在xxl-job的调度中心创建完执行器后,重启客户端成功后,再次进入到xxl-job的调度中心的执行器管理页面查看刚刚新建的执行器是否是在线状态。当在线机器中有你的项目启动的ip时,说明你项目中配置的执行器已经接入到xxl-job的调度中心了,后续只需要新建任务使用这个执行器去执行就好。

    SpringBoot 项目整合xxl-job

    3.6 新建任务

    先进入xxl-job的调度中心的任务管理去新建一个任务,选择刚创建的执行器,运行模式选择BEAN,

    JobHandler这里输入的要与客户端具体执行定时任务的handle名一致就好。

    SpringBoot 项目整合xxl-job

    在到客户端项目中需要具体执行定时任务的方法上使用xxl的 @XxlJob注解来与调度中心刚新建的任务的JobHandler对应。这样就可以将这个处理定时任务的方法与调度中心的任务关联在一起。

    @XxlJob("testJobHandler")
    public void test() throws Exception {
        // 定时任务具体处理逻辑
        ...
            
        log.info("XXL-JOB, 任务执行结束.");
    }
    
    3.7 启动任务

    新建的任务初始状态是STOP的,需要进入调度中心的任务管理将需要执行的定时任务启动的,启动成功后,这个任务的状态会变成RUNNNG。后续就会根据你新建任务时配置的Corn表达式的规则进行定时执行客户端的任务处理的方法。

转载请注明来自码农世界,本文标题:《SpringBoot 项目整合xxl-job》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,92人围观)参与讨论

还没有评论,来说两句吧...

Top