xxl-job 任务调度搭建及简单使用

news2024/12/24 2:48:13

  xxl-job是开源架构,可以通过它实现调度中心和执行器。 git地址和 官网中进行了详细的技术说明。
  xxl-job支持单机部署和集群式部署,在集群式部署中又可以实现调度中心集群式部署和执行器集群式部署。本文主要针对调度中心和执行器分离单机部署方式进行说明。

xxl-job任务调度搭建及简单使用

  • 简介
  • 调度中心搭建
    • 数据库创建
    • 配置文件编写
    • docker容器启动
    • 启动测试
  • 执行器搭建
    • 依赖引入
    • 配置
  • 使用说明
    • 运行调度中心
    • 运行执行器
    • 编写任务代码
    • 执行

简介

  xxl-job中存在调度中心和执行器两个概念,其中调度中心负责定时调度,执行器负责具体的执行工作。调度中心本质上就是一个spring boot项目。在使用xxl-job时在调度中心配置调度规则及执行内容,然后再在执行器中实现具体的执行作业。
  本demo中在调度中心配置每隔一分钟执行一次,执行的具体内容为调用某个service的方法,在执行其中需要实现service的具体方法。

调度中心搭建

  调度中心的搭建可以分为四部分进行分别是:

  • 数据库创建
  • 配置文件编写
  • docker容器启动
  • 启动测试
    下面将针对上述四个过程中进行详细说明。

数据库创建

  数据库创建SQL文件可以通过git查找,位于\xxl-job-master\doc\db路径下,可以在mysql中创建一个数据库然后执行该SQL文件实现数据库表结构及基础数据的初始化。

配置文件编写

  通过查看xxl-job-admin项目的pom文件包含以下内容:

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

  可知调度中心本质上就是一个springboot项目。其docker构建文件如下:

FROM openjdk:8-jre-slim
MAINTAINER xuxueli
ENV PARAMS=""
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ADD target/xxl-job-admin-*.jar /app.jar
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /app.jar $PARAMS"]

  可通过-e PARAMS设置docker启动命令中调度中心的执行参数。既然调度中心本质上一个spring boot程序,因此可以配置该程序运行的配置文件,即application.properties文件。根据官网指出xxl-job提供了以下特有配置内容:

### 调度中心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

  除此之外我们还可以进行spring boot的启动项配置,如下设置启动使用数据库连接内容:

### xxl-job, datasource
spring.datasource.url=jdbc:mysql://mysql:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

docker容器启动

  在docker启动的过程中我们主要需要注意的点有以下内容:

  • 指定配置文件
  • 端口映射
  • 网络配置

  由于spring boot启动可以指定配置文件,在进行docker部署调度中心时需要配置数据库连接、token等相关内容,因此我们需要实现自己的配置文件,可以通过文件卷挂载+ -e配置变量的形式实现进行配置文件自定义。
  spring boot web项目启动的端口默认是8080,使用docker部署需要将容器内端口映射出来。
  此外,由于xxl-job-admin调度中心需要使用到数据库,因此我们需要将调度中心容器和mysql容器实现网络通信,为方便两个容器之间的通信,将MySQL容器和调度中心容器放到同一网络下,因此需要配置–net参数。
  部署命令如下:

docker run -d --net=nacos-mysql --name=xxl-job-admin -p 8081:8080 -v D:\docker\xxl-job\application.properties:/application.properties  -e PARAMS='--spring.config.location=/application.properties' xuxueli/xxl-job-admin:2.4.0

注意:需要将mysql容器也放到nacos-mysql网络下,并且创建数据库。调度中心的容器创建过程中必须指定版本号,不能使用last进行获取。

启动测试

进行管理员客户端访问。

http://localhost:8081/xxl-job-admin/
用户名:admin
密码:123456

运行界面如下:
在这里插入图片描述

执行器搭建

依赖引入

  执行器实际就是执行任务的具体程序,在实现执行器搭建的过程中需要在项目中引入:

  		<!-- xxl-job-core -->
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.4.0</version>
        </dependency>
        <!-- 作为一个spring cloud项目,使用openfeign进行api调用具体的服务-->

配置

@Configuration
public class XxlJobConfig {
    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        // 调度中心url
        xxlJobSpringExecutor.setAdminAddresses("http://127.0.0.1:8081/xxl-job-admin");
        // 执行器名称
        xxlJobSpringExecutor.setAppname("imos-job");
//        xxlJobSpringExecutor.setAddress("");
//        xxlJobSpringExecutor.setIp("192.168.1.56");
//        xxlJobSpringExecutor.setPort(7999);
		// token,该配置必须和调度中心的配置文件总的token配置一致
        xxlJobSpringExecutor.setAccessToken("default_token");
//        xxlJobSpringExecutor.setLogPath(logPath);
//        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }
}

  通过以上操作及完成了执行器的搭建过程,可以将执行器理解为一个spring 项目,在里面编写我们具体的业务代码即可。
  在本demo中执行器将通过openfeign调用其他微服务的相关接口实现定时任务,因此pom文件中还需要引入其他相关依赖。
  在执行器的搭建过程中,我们发现除了引入job-core依赖配置bean之外,并没有为执行器做什么其他相关配置,执行器某个业务的定时执行是由调度中心进行配置的,执行器本身并没有定时配置,简单来讲,执行器仅给调度中心提供原料执行的作用。
  本demo的实现采用glue模式进行实现,该模式下,使用者在调度中心编写java代码,java代码中可以通过@autowire的形式引入执行器定义的service,因此可以理解为执行器为调度中心提供原料。待定时任务执行时,调度中心其实是将java代码发送给执行器,执行器接受到代码后通过反射等形式进行执行代码。

使用说明

运行调度中心

  启动调度中心docker容器,登录调度中心管理界面,并添加一个执行器,该执行器名称和我们执行器中设定的名称需要一致,注册方式选择自动注入即可:
在这里插入图片描述

运行执行器

  运行执行器后,OnLine 机器地址应该存在一组ip字段。如下图
在这里插入图片描述## 新增任务
  在调度中心中新增任务并选择glue模式,如下图
在这里插入图片描述

编写任务代码

  在任务管理列表中点击操作进入GULE模式,进行java代码编写:
在这里插入图片描述
  在编写代码的过程中可以引入执行器中存在的service或者new执行器中的对象,需要注意的是在使用执行器的类或者方法的过程中需要import相关类,类的全限定名和执行器中需要严格保持一致。

执行

  在任务管理操作进行执行任务,执行器将执行该代码并在控制台展示相关内容如下图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/970794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

因为axios请求后端,接收不到token的问引出的问题

vue axios请求后端接受不到token的问题。 相关概念 什么是跨域&#xff1f; 跨域指的是在浏览器环境下&#xff0c;当发起请求的域&#xff08;或者网站&#xff09;与请求的资源所在的域之间存在协议、主机或端口中的任何一个条件不同的情况。换句话说&#xff0c;只要协议、…

java八股文面试[JVM]——如何打破双亲委派模型

双亲委派模型的第一次“被破坏”是重写自定义加载器的loadClass(),jdk不推荐。一般都只是重写findClass()&#xff0c;这样可以保持双亲委派机制.而loadClass方法加载规则由自己定义&#xff0c;就可以随心所欲的加载类&#xff0c;典型的打破双亲委派模型的框架和中间件有tomc…

基于Java的ssm高校教学业绩信息管理系统源码和论文

基于Java的ssm高校教学业绩信息管理系统源码和论文122 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存…

如何使用Windows Xshell连接另外一台主机上的虚拟机解决方案

前言 我需要使用我自己的笔记本打开虚拟机服务&#xff0c;如何使用我的台式电脑进行服务访问 环境&#xff1a; 台式&#xff1a;Windows10 笔记本&#xff1a;Windows10 网络是由笔记本开放热点&#xff0c;在同一局域网下 正文 首先我们先要看&#xff0c;我们所需要的虚拟…

Python中重要的条件语句教程

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 一. 了解条件语句 假设一个场景&#xff1a; 同学们这个年龄去过网吧吗&#xff1f; 去网吧进门想要上网必须做的一件事是做什么&#xff1f;&#xff08;考虑重点&#xff09; 为什么要把身份证给工作人员&#xf…

【广州华锐互动】利用AR远程指导系统进行机械故障排查,实现远程虚拟信息互动

随着工业自动化和智能化的不断发展&#xff0c;机械故障诊断已经成为了工业生产中的重要环节。为了提高故障诊断的准确性和效率&#xff0c;近年来&#xff0c;AR&#xff08;增强现实&#xff09;远程协助技术逐渐应用于机械故障诊断领域。本文将探讨AR远程协助技术在机械故障…

【方案】智慧园区:AI与视频融合技术如何助力园区监管智能化升级?

一、行业背景 随着科技的不断发展&#xff0c;人工智能&#xff08;AI&#xff09;技术正在各个领域迅速应用和推广。其中&#xff0c;智慧园区是一个重要的应用场景&#xff0c;它通过AI技术的支持&#xff0c;实现了园区的智能化管理和高效运营。 1、园区管理智慧化升级需求…

大数据成为市场营销利器 ,促进金融贷款企业获客精准化

随着大数据技术的不断普及&#xff0c;中国对尖端技术和云计算技术的投资大幅增加。大数据、云计算技术、物联网等一系列新一代信息技术也加速完善。 目前&#xff0c;大数据技术也非常成熟&#xff0c;大数据的应用领域也多种多样。大数据的重要方面“运营商大数据”已经被政…

Qt+C++自建网页浏览器-Chrome blink最新内核基础上搭建-改进版本

程序示例精选 QtC自建网页浏览器-Chrome blink最新内核基础上搭建-改进版本 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC自建网页浏览器-Chrome blink最新内核基础上搭建-改进版…

MySQL性能分析工具的使用

1. 数据库服务器的优化步骤 当我们遇到数据库调优问题的时候&#xff0c;该如何思考呢&#xff1f;这里把思考的流程整理成下面这张图。 整个流程划分成了 观察&#xff08; Show status &#xff09; 和 行动&#xff08; Action &#xff09; 两个部分。字母 S 的部分…

Vue框架--Vue中的计算属性

下面&#xff0c;我们来实现一个这样的需求。 实现输入框1和输入框2中文字内容的拼接。

你应该知道的几个大数据平台相关术语

你应该知道的几个大数据平台相关术语 1、大数据平台&#xff1a;一个全面的信息处理和分析系统&#xff0c;它能处理和分析海量、多样性的数据&#xff0c;从而为企业提供决策支持。 2、数据脱敏&#xff1a;是指对某些敏感信息通过脱敏规则进行数据的变形&#xff0c;实现敏…

JavaScript(内置对象)

目录 一&#xff0c;JavaScript内置对象二&#xff0c;Array对象2.1&#xff0c;常用属性和方法2.2&#xff0c;基本方法 三&#xff0c;Date对象3.1&#xff0c;常用方法3.2&#xff0c;小案例 四&#xff0c;Math对象 一&#xff0c;JavaScript内置对象 Array&#xff1a;用于…

ToBeWritten之基于ATTCK的威胁狩猎

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…

解决IDEA中java的system.properties乱码问题

在拉了别人的代码到本地后发现system.properties中中文注释都变成了乱码&#xff0c;故记录下解决步骤&#xff0c;供参考&#xff0c;我的系统是mac系统 1、在IDEA中打开设置&#xff0c;IDEA--->Preferences 2、点击Editor-->File Encodings 3、图中三处选择UTF-8&…

【设计模式】我终于读懂了职责链模式。。。

文章目录 &#x1f36a;学校 OA 系统的采购审批项目&#x1f36a;传统方案解决OA 系统审批&#xff0c;传统的设计方案(类图)&#x1f36a;传统方案解决OA 系统审批问题分析&#x1f36a;职责链模式基本介绍&#x1f36a;职责链模式的原理类图&#x1f36a;对原理类图的说明-即…

Python+Requests+Pytest+Excel+Allure 接口自动化测试项目实战【框架之间的对比】

--------UnitTest框架和PyTest框架的简单认识对比与项目实战-------- 定义&#xff1a; Unittest是Python标准库中自带的单元测试框架&#xff0c;Unittest有时候也被称为PyUnit&#xff0c;就像JUnit是Java语言的标准单元测试框架一样&#xff0c;Unittest则是Python语言的标…

华为云 异构数据迁移

数据库和应用迁移 UGO&#xff08;Database and Application Migration UGO&#xff0c;以下简称为UGO&#xff09;是专注于异构数据库结构迁移的专业服务。可将源数据库中的DDL、DML和DCL一键自动转换为华为云GaussDB/RDS的SQL语法&#xff0c;通过数据库评估、对象迁移两大核…

本地电脑搭建Web服务器建立一个属于自己的网页该如何操作呢?

本地电脑搭建Web服务器并用cpolar发布至公网访问 文章目录 本地电脑搭建Web服务器并用cpolar发布至公网访问前言1. 首先在电脑安装PHPStudy、WordPress、cpolar2. 安装cpolar&#xff0c;进入Web-UI界面3. 安装wordpress4. 进入wordpress网页安装程序5. 利用cpolar建立的内网穿…