Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java XxlJob 必知必会

Java XxlJob 必知必会

作者头像
Wu_Candy
发布于 2022-07-04 13:45:17
发布于 2022-07-04 13:45:17
84200
代码可运行
举报
文章被收录于专栏:无量测试之道无量测试之道
运行总次数:0
代码可运行
通过 3W1H 来认识XxlJob
Step1: 第一个W(What)先来看看它是什么?

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

Step2: 第二个W (Why)为什么要去学习XxlJob?
  1. 现在越来越多的企业都开始在使用 XxlJob 做为第三方平台进行任务调度。
  2. XxlJob 上手容易,学习成本低,功能强大。
  3. 涉及到 XxlJob 相关的业务需要有深入的了解才可以做好全面的测试。
Step3: 第三个W (Where)它在系统框架中的位置?

先来看看 XxlJob 自身的系统结构:

Step4: H即How 怎么样去部署和使用?

这里以单机部署为示例

(1):clone 代码:git clone https://github.com/xuxueli/xxl-job

(2):初始化数据库

/xxl-job/doc/db/tables_xxl_job.sql

数据库相关说明:

  1. -xxl_job_lock:任务调度锁表;
  2. -xxl_job_group:执行器信息表,维护任务执行器信息;
  3. -xxl_job_info:调度扩展信息表,用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等等;
  4. -xxl_job_log:调度日志表,用于保存XXL-JOB任务调度的历史信息,如调度结果、执行结果、调度入参、调度机器和执行器等等;
  5. -xxl_job_log_report:调度日志报表,用户存储XXL-JOB任务调度日志的报表,调度中心报表功能页面会用到;
  6. -xxl_job_logglue:任务GLUE日志,用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;
  7. -xxl_job_registry:执行器注册表,维护在线的执行器和调度中心机器地址信息;
  8. -xxl_job_user:系统用户表;

(3):调度中心配置

/xxl-job/xxl-job-admin/src/main/resources/application.properties

主要是配置了数据库的连接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
### web
server.port=8080
server.servlet.context-path=/xxl-job-admin
### 调度中心JDBC链接:链接地址请保持和 2.1章节 所创建的调度数据库的地址一致
spring.datasource.url=jdbc:mysql://192.168.3.2:3306/xxl_job_test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=beta
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

(4):执行器项目配置

要与调度中心部署的地址一致

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
### 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册""任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin

### xxl-job executor appname
### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=xxl-job-executor-demo

此处的执行器名称会自动注册到调度中心平台上面去,如下所示:

(5):启动服务

先使用IDEA来启动调度中心项目,如下所示:

xxl-job-admin 的8080 端口被启动了。

再使用IDEA来启动执行器项目,如下所示:

xxl-job-Executor 的8081端口被启动了。

xxljob 运行原理

运行原理图所示:

原理解释:

1. 任务执行器根据配置的调度中心的地址,启动注册线程向调度中心的执行器管理发起自动注册。执行器管理中保存着注册执行器,后续会根据这个注册信息给执行器下发任务。

2. 如果此时有需要执行的任务,任务管理模块会根据执行器管理中注册的执行器信息,向任务执行器下发任务。任务执行器中的任务执行服务接受到任务以后会将任务发送到待执行任务的队列中,队列中的任务会由执行线程 JobHandler 依次获取并且执行。

这里会维护一个任务执行的线程池,池中就是一个个 JobHandler 线程,它们是执行任务的主力军。

3. JobHandler 执行器基于线程池执行任务,并把执行结果放入执行结果队列中,同时会把执行日志写入任务日志文件中,以供日志查询。

然后通知毁掉线程,告知任务执行完毕,回调线程会通知调度中心的监控运维模块,任务执行完毕。

4. 用户可以在调度中心查看任务日志,其过程是通过发送日志查询请求给任务执行器中的日志服务,然后查询任务日志文件实现的。

实际示例分析

示例:

  1. 在任务执行器端开发一个任务示例:

内容非常的简单,就是获取请求的参数,然后再日志输出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@XxlJob("testJobHander")
public void testJobHander() throws  Exception{
    String param = XxlJobHelper.getJobParam();
    XxlJobHelper.log("the param is:"+param);
}

2. 在调度中心 > 任务管理【页面】>【新增】任务相关配置

如下所示:

3. 是点击【操作】下面的执行一次【输入参数为:this is test】,可以查看调度日志:

4. 可以查看【运行报表】数据:

end

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无量测试之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Django 提交 form 表单
创建 Django 的过程可以参考上一篇文章 https://www.cnblogs.com/klvchen/p/10601536.html
py3study
2020/01/17
1.1K0
diango使用数据库
之前写的页面,虽然和用户交互得很好,但并没有保存任何数据,页面一旦关闭,或服务器重启,一切都将回到原始状态。
py3study
2018/08/03
7600
发布学习django的第一个项目
最近看到很多人在学django,我就来发一篇这方面的文章,本文的项目地址请点击阅读原文,即可跳转,欢迎star,fork!
公众号guangcity
2019/09/20
1K0
发布学习django的第一个项目
django 实现
Title 1.输入信息,在底部输出用户输入的信息(数据存储在数据库中) urls.py from django.contrib import admin from django.urls import path from first import views urlpatterns = [ path('admin/', admin.site.urls), path('info/', views.show_info), path('userInfo', views.show_us
py3study
2020/01/19
3450
Django + Uwsgi + Nginx 的生产环境部署
使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了。比如静态文件处理,安全,效率等等,本篇文章总结归纳了一下基于uwsgi+Nginx下django项目生产环境的部署
py3study
2018/08/03
5.6K2
Django 项目中添加静态文件夹
在 mysite 文件夹下添加一个 statics 文件夹用来存放 js 文件
py3study
2020/01/16
7170
Django 项目中添加静态文件夹
Django Web开发基础知识
MVC - Model View Controller,模型(model)-视图(view)-控制器(controller)的缩写,是软件工程中的一种软件架构模式,Model模型中主要用于存储与数据库相关的字段或数据库通信方面的东西,Controller控制器用于存储URL的分发等,最后的View视图则是完善控制器中的路径分发,每一个路径对应一个view视图函数。
王瑞MVP
2022/12/28
2.2K0
Django Web开发基础知识
Django 开发模板与视图
Django最强大的部分之一是自动管理界面。它从模型中读取元数据,以提供一个快速的,以模型为中心的界面,受信任的用户可以在其中管理您网站上的内容。管理员的建议用法仅限于组织的内部管理工具。它并非旨在构建您的整个前端。
王瑞MVP
2022/12/28
1.9K0
第十八章 DjangoWeb开发框架
第十八章 DjangoWeb开发框架 第一课 内容概要: 1.JS正则 -登录注册验证 2.组件 1.BootStrap -css -js 学习BootStrap规则 2.jQueryUI -css -js 学习jQueryUI规则 3.EasyUI -css -js 学习EasyUI规则 3.Web框架 4.Django(python功能最齐全的Web框架) 第二课 JS正则 1.t
玩蛇的胖纸
2018/06/08
8520
MVC和MTV模式
著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层;他们之间以一种插件似的,松耦合的方式连接在一起。
菲宇
2022/12/21
4140
MVC和MTV模式
Django基础教程
URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。
超蛋lhy
2018/08/31
7.5K0
【玩转全栈】----用户管理案例
经过前面的学习,相信您对Django、MySQL,以及他们之间的连接已经非常熟悉了,本文是一个关于Django、MySQL的一个小案例
用户11404404
2025/01/24
500
【玩转全栈】----用户管理案例
Python Web框架Django学习
=================================================================================================
py3study
2020/01/07
8770
Python Web框架Django学习
Django实战-用户注册和登陆系统
每当我们开始一个新项目的时候,通常都会搭建一个全新、独立、隔离的项目环境,这样做的好处自然不必多说。有很多种建立项目虚拟环境的工具,使用比较普遍的是Python中的virtualenv。安装好virtualenv工具后,进入想要放置的项目文件夹,建立一个虚拟环境,激活环境,安装django。
菲宇
2019/07/31
7.8K0
Django实战-用户注册和登陆系统
Django入门
一般是用户通过浏览器向服务器发送一个请求(request),首先会去访问视图函数,如果不涉及数据的调用(那么这个时候视图函数返回一个模板,也就是你一个网页给用户),视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板的空格中,最后返回网页给用户
py3study
2020/02/10
2.3K0
Django-choices字段值对应关系(性别)-MTV与MVC科普-Ajax发json格式与文件格式数据-contentType格式-Ajax搭配sweetalert实现删除确认弹窗-自定义分页器
AJAX(Asynchronous Javascript And XML 异步的Javascript和XML)
suwanbin
2019/09/26
6.4K0
Django-choices字段值对应关系(性别)-MTV与MVC科普-Ajax发json格式与文件格式数据-contentType格式-Ajax搭配sweetalert实现删除确认弹窗-自定义分页器
Django用户登录与注册系统
一、创建项目 1.1.创建项目和app django-admin startproject mysite_login python manage.py startapp login 1.2.设置时区和语言 Django默认使用美国时间和英语,在项目的settings文件中,如下所示: LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True 我们把它改为亚洲/上海时间和中文 LAN
zhang_derek
2018/04/11
11.6K0
Django用户登录与注册系统
jS正则和WEB框架Django的入门
该文章讲述了如何利用Python的Pandas库和Excel的VBA编程实现数据分析。首先介绍了Pandas库和Excel的VBA编程的基本概念,然后分别讲解了如何利用Pandas库和Excel的VBA编程实现数据的处理和分析。具体包括Pandas库的常用函数、数据读取、数据清洗、数据转换、数据分析等操作,以及Excel的VBA编程中的常见操作,如遍历工作表、提取表格中的数据、处理异常值、数据转换等。通过这些操作,可以高效地完成数据的处理和分析任务。
coders
2018/01/04
2.2K0
jS正则和WEB框架Django的入门
Django教程第2章| Web开发实战-用户管理
模板文件和静态文件分别放入templates和static文件夹,django会自动加载到容器。
仲君Johnny
2024/01/24
4051
Django教程第2章| Web开发实战-用户管理
Django 入门学习(3)
在例4的基础上,我希望直接保存数据到数据库中。 Django自带了一个sqlite的数据库,已经配置好了 可以直接使用。使用方式和sqlalchemy类似,相当于一个内置的ORM框架。
py3study
2020/01/09
3220
Django 入门学习(3)
相关推荐
Django 提交 form 表单
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验