springboot与xxl-job,附上与docker-compose整合

springboot与xxl-job整合,附上与docker-compose启动

 

 

前言

因为公司内部项目需要经常导出一些报表发给领导,以及很多时候需要定时发送消息,所以需要一个定时任务框架,最好它能够实时修改生效以及页面维护,我们从中选择了XXL-JOBhttps://www.xuxueli.com/xxl-job/

 

选型

 

目前市面上常见的有quartz,我的上家公司就是用quartz, 底层以“抢占式”获取DB锁并由抢占成功节点负责运行任务, 任务多的情况下容易导致经常死锁,非常麻烦,而且没有页面可以维护,查看任务。

第二种就是Elastic-Job,我的上上家公司就是用这套,因为我们当时是用dubbo+zookeeper的框架,所以也很贴切,加上hippo框架可以实现界面维护, 但是我们公司这个项目还没有架构到微服务所以也不准备引入ZK。

XXL-JOB就比较简单使用了,也没有这么高的入侵性,特别是现在还支持GLUE任务,实现在线编辑生效,还能页面维护。

 

XXL-JOB模式

XXL-JOB 分为 调度中心(XXL-JOB-Admin) 以及执行器(我们自己的项目)调度中心就是类似我们微服务的注册中心, 是一个服务发现与治理作用。 而我们的执行器,就是我们的消费者和生产者。

 

与springboot整合

调度中心搭建

在官网找到下载源码地址:

https://www.xuxueli.com/xxl-job/#1.5%20%E4%B8%8B%E8%BD%BD

有github和gitee选择,我选择从github下载最新的:

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

 

 

 

 

 

打开项目, 找xxl-job-admin的resources对应地址:

xxl-job201\xxl-job-admin\src\main\resources\application.properties

 

这里我是修改了端口以及数据库账号密码

 

 

 

之后再启动:

 

 

成功了:

 

 

打开页面 你的ip记得换:

http://192.168.110.195:7999/xxl-job-admin/

 

 

那么调度中心搭建就结束了。

 

执行器(项目)整合

小编之前无论怎么启动调试 都无法注册上服务, 最后是更换为最新的2.3.0版本才解决的这个问题,如果遇到无法注册上服务的,也可以试着使用最新版本。

 

先下载依赖:

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

 

编写配置类:

 

 

package com.XXXX.core.xxlJob;


import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
* @author rick
* @create 2022/3/7 10:19
*/
@Slf4j
@Component
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.setIp(ip);
      xxlJobSpringExecutor.setAppname(appname);
      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();
    */

}

 

 

在application.yml 中加入对应配置:

1、这里的addresses必须加上端口号,如果你没加上端口号,除非你在nginx中配置了80端口且映射7999服务,否则无法注册到调度中心。

2、appname请填写好,否则无法注册到调度中心。

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

 

配置类就写完了.

 

新增一个任务service(我这里用的是**GLUE**模式,写好代码直接复制到xxl-job中**IDE GLUE**进行保存,代码实时生效,可执行):

 

 如果你要用Bean模式,那么就需要把bean注册到spring中,然后对应的beanName需要@XxlJob(value = "beanName")

 

 

到这里,你的执行器配置就写完了。

 

 

接下来去调度中心填写你的执行器:

 

 

 

 

等待一下,会发现服务注册上了。

 

 

然后就可以在任务管理 添加自己的任务吧~~~~

 

 

 

与Docker-Compose整合

 

XXL-JOB 与Docker-Compose原文连接:

https://www.http3w.com/archives/445

 

下载镜像

docker pull xuxueli/xxl-job-admin:2.3.0

 

初始化对应版本数据库(xxl_job)

https://github.com/xuxueli/xxl-job/blob/2.3.0/doc/db/tables_xxl_job.sql

因为我的版本是2.3.0,所以默认打开本sql脚本,其他版本可自行选择

创建docker-comopose.yml

这里的ports 我改成了我的内部7999端口(也是和原文不同的地方)。

version: '3'
services:
xxl-job-admin:
  image: xuxueli/xxl-job-admin:2.3.0
  restart: always
  container_name: xxl-job-admin
  environment:
    PARAMS: '--spring.datasource.url=jdbc:mysql://IP:PORT/xxl_job?Unicode=true&characterEncoding=UTF-8 --spring.datasource.username=root --spring.datasource.password=123456'
  ports:
    - 80:7999
  volumes:
    - ./data/applogs:/data/applogs

启动后

访问地址为:IP/xxl-job-admin/ 账号: admin 密码: 123456

docker-compose部署xxl-job-admin

posted @   Rick_Leee  阅读(924)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示