SpringBoot整合XXLJob+Docker部署

1、概述

XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。xxl三个字母是其开发者许雪里名字的缩写。

几个特性:

1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
2、动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效
3、注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行,每30秒清理一次注册表中的无效机器。同时,也支持手动录入执行器地址;
4 、失败处理策略:每10秒检测失败任务,报警和重试;
5、一致性:“调度中心”通过DB锁保证集群分布式调度的一致性, 一次任务调度只会触发一次执行
6、执行器HA(分布式):任务分布式执行,任务"执行器"支持集群部署,可保证任务执行HA
7、弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务

2、架构

 3、在xuxueli项目中使用

从git拉取代码:xxl-job: 一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 - Gitee.com拉取项目后运行项目自带的tables_xxl_job.sql文件,在Navcat中去运行,生成需要的表

表描述

表名描述
xxl_job_group执行器分组
xxl_job_info任务信息
xxl_job_lock任务通知分布式锁
xxl_job_log任务执行日志
xxl_job_log_report日志报告
xxl_job_logglueglue模式任务日志
xxl_job_registry执行器注册信息
xxl_job_user用户表

项目个模块说明

xxl-job-admin:调度中心

xxl-job-core:公共依赖

xxl-job-executor:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)
xxl-job-executor-sample-spring:Spring版本,通过Spring容器管理执行器,比较通用,推荐这种方式;
xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器;
xxl-job-executor-sample-jfinal:JFinal版本,通过JFinal管理执行器;
xxl-job-executor-sample-nutz:Nutz版本,通过Nutz管理执行器;

这里选择springboot执行器

admin配置文件

打开xxl-job-admin模块,在application.properties中进行后台的配置

执行器模块的配置文件

 启动拉取的项目:

先启动admin模块,在启动执行器模块。

我们启动XxlJobAdminApplication类和XxlJobExecutorApplication,访问http://localhost:8080/xxl-job-admin 默认账户admn,密码123456

输入账号密码后即可进入系统

配置成功执行器,就会看到下图,要不然online及其地址是空的(可能会看不到自己配置的执行器,可以手动添加不输入地址,默认会自动寻找对于执行器的地址的)

 编写自己的定时逻辑

定位到springboot模块下的jobhandler层下面

在任务管理里面新增任务

注意这里的JobHandler对应@XxlJob注解里面的名称       

 然后在找到刚刚添加的任务,点击操作里面的启动

可以看到结果,刚刚编写的代码已经被执行了

4、SpringBoot集成

新建项目并引入依赖

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

添加配置文件

server:
  # 注意xxljob使用的端口为8080,所以这里需要指定端口号不为8080(默认为8080),防止冲突
  # 如果xxljob不为8080或者不在同一个服务器上,则不用指定
  port: 8081
xxl:
  job:
    admin:
      # xxl-job后台管理界面的地址
      addresses: http://127.0.0.1:8080/xxl-job-admin
    executor:
      # 此执行器的名称
      appname: first-xxljob
      # 此执行器的端口
      port: 38801
      # 此执行器的日志存放路径
      logpath: D:/gitload_pro/xxl-job/log
      # 此执行器的日志保存时间
      logretentiondays: 1

添加配置类

将xxl-job-executor-sample-springboot这个模块下的XxlJobConfig复制一份到项目中,然后将相关配置设置好即可。

注意:这里将accessToken、address、ip给注释了,因为上面的配置文件没有写,不注释会报错

package com.zut.config;

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.RequiredArgsConstructor;
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
@RequiredArgsConstructor
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();
     */


}

  创建自己的定时任务

@Component
public class MyJob {

    @XxlJob("SpringBoot—XXLJob")
    public void test(){
        System.out.println("This is SpringBoot XXLJob Test!");
    }
}

在xxl-job-admin页面添加执行器

 注意:我们可以将xxl-job-admin项目拷到自己的项目,或者将其单独部署在服务器并启动

登录:http://localhost:8080/xxl-job-admin admin/123456

点击执行器管理==》新增

此处的AppName填你项目中配置的xxl.job.executor.appname名称。选择自动注册,保存即可。

添加任务

点击任务管理==》点击执行器下拉框

 选择刚刚添加的执行器,然后点击“新增”按钮,新增任务:

 

启动自己的项目

注意,此处的JobHandler填@XxlJob注解里面的值。填好点击保存即可。就可以看到我们已经有一条任务了,此时点击“操作”,然后点击“启动”,定时任务就运行了。笔者这里是每5秒运行一次。  

测试

5、将xxl-job部署在docker上

编写docker-compose.yml

version: "1
services:
  xxl_job_admin:
    # 指定容器名称
    container_name: xxl_job_admin
    # 重启机制
    restart: always
    image: openjdk:8
    volumes:
      # 本地jar包路径
      - /usr/soft/jars/xxl-job-admin-2.3.0.jar:/usr/soft/jars/xxl-job-admin-2.3.0.jar
      # 本地脚本路径
      - /usr/soft/xxljob_shell/xxl-job-admin-2.3.0.sh:/usr/soft/xxljob_shell/xxl-job-admin-2.3.0.sh
      # 挂载日志 -v A:B ,A指宿主机位置,B指容器位置
      - /usr/soft/logs/xxl_job_admin:/data/applogs
      # 指定容器时间为宿主机时间
      - /etc/localtime:/etc/localtime
    # 访问端口
    ports:
      - "8080:8080"
    environment:
      # 指定时区
      - TZ="Asia/Shanghai"
    #启动容器后执行的命令
    entrypoint: sh /usr/soft/xxljob_shell/xxl-job-admin-2.3.0.sh

启动脚本,也就是上一步最后一行的脚本

上传到:/usr/soft/xxljob_shell/xxl-job-admin-2.3.0.sh

nohup java -Duser.timezone=Asia/Shanghai 
-jar /usr/soft/jars/xxl-job-admin-2.3.0.jar 
--server.port=8080 >/dev/null 2>&1

  构建容器

docker-compose -f docker-compose.yml up -d

执行上面的脚本

./xxl-job-admin-2.3.0.sh

如果没有权限执行赋权命令:chmod 777  xxl-job-admin-2.3.0.sh

查看是否部署成功

http://127.0.0.1:8080/xxl-job-admin/toLogin换成自己服务器的ip和指定的端口

出现下图表示部署成功

将自己项目的ip和端口改成服务器上部署的端口和ip,然后上传到服务器,执行命令

java -jar jar包名称

在上面的页面启动定时任务

发现定时任务已经启动

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值