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_logglue glue模式任务日志
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-adminexecutor:# 此执行器的名称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;@Beanpublic 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: alwaysimage: openjdk:8volumes:# 本地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包名称

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

发现定时任务已经启动

SpringBoot整合XXLJob+Docker部署相关推荐

  1. SpringBoot整合!docker更新镜像名称

    认识HTTP 什么是超文本 什么是传输 什么是协议 HTTP相关组件 网络模型 OSI 模型 浏览器 Web服务器 CDN WAF WebService HTML Web页面构成 与 HTTP 有关的 ...

  2. Springboot整合xxl-job实现任务自定义定时任务

    1.引入相关依赖 maven:<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job ...

  3. xxljob 配置文件_SpringBoot整合Xxl-Job的完整步骤记录

    一.下载Xxl-Job源代码并导入本地并运行 1.使用Idea或Eclipse导入 2.执行sql脚本(红色标记处) 3.运行xxl-job-admin(xxl-job后台管理,主要方便管理各种各样的 ...

  4. Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo

    Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...

  5. 阿里云使用Docker部署minio整合SpringBoot

    第一步:拉取镜像 docker pull minio/minio 第二步:运行镜像 docker run \-p 19000:9000 \-p 19001:9001 \--name sifan-min ...

  6. Docker 部署SpringBoot项目不香吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:流星007 链接:toutiao.com/i68433912 ...

  7. docker部署springboot_创建SpringBoot项目部署到docker全过程

    目录 docker 介绍 安装 docker Ubuntu 安装 docker CentOS 安装 docker 通过脚本安装 拉取 java 环境 创建 springboot 项目 打包 sprin ...

  8. xxl-job搭建、部署、SpringBoot集成xxl-job

    一.搭建xxl-job 1.下载xxl-job代码 码云地址:https://gitee.com/xuxueli0323/xxl-job gitHub地址:https://github.com/xux ...

  9. docker部署springboot_Docker+SpringBoot快速构建和部署应用

    前言 Docker技术发展为当前流行的微服务提供了更加便利的环境,使用SpringBoot+Docker部署和发布应用,其实也是一件比较简单的事情.当前,前提是得有Docker的基础. 构建一个Spr ...

最新文章

  1. boost::asio中的C/S同步实例源码
  2. GNU/Linux平台上正则表达式的简单使用
  3. ME2N标准报表中加EKKO/EKPO中没显示的字段
  4. Python 网络爬虫笔记1 -- Requests库
  5. 关于Maven中的常见命令,通过命令的方式快速创建一个空的maven工程,将jar包打到maven仓库中
  6. dlna和miracast可以共存吗_AirPlay、DLNA、Miracast三大无线技术介绍
  7. TypeScript里的Index signature
  8. Mysql问题 ERROR 1054 (42S22): Unknown column ‘password‘ in ‘field list‘
  9. 【李宏毅2020 ML/DL】P74 Generative Adversarial Network | Basic Idea
  10. 准谐振器和双二阶广义积分器的共同点和不同点
  11. VMware张海宁: 如何实现高效安全的镜像运维?
  12. 基于HPC场景的集群管理系统(slurm系统初相识)
  13. python中sys是什么意思_python里的sys是什么意思
  14. Java 数字转汉字
  15. 怎样写好求职简历(STAR法则)
  16. R语言 表达式对象的求值 eval
  17. 芯片启动:从Bootrom到Linux完整启动流程
  18. linux需要wifi网络认证,无线802.1x认证简介及配置方法
  19. C++ bind2nd用法
  20. 抽象语法树的定义(C语言版)

热门文章

  1. 大数据时代农商银行转型发展的思考
  2. 腾讯大举:封杀第三方微信工具 使用Wetool将被封号
  3. 黑马程序员_关于2048小游戏的一些经验总结
  4. 计算机信息化办公知识,A013信息化办公
  5. MySQL 添加索引,删除索引及其用法
  6. pub计算机术语,【Unionpub学术】计算机与信息技术专题详情
  7. 阜阳机器人餐厅_网红智能机器人来阜阳这家医院“上班”了,还会说阜阳话!...
  8. 重庆大学计算机学院王臣,谢洪(重庆大学计算机学院教授)_百度百科
  9. springboot项目使用短信验证码的登录注册功能
  10. 用Android UEventObserver监听内核uevent