框架概述

框架主页:

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

包含组件:

1.调度中心

2.任务执行器

特点:

1.调度中心,任务执行器独立部署,互不影响。

2.调度中心和任务执行器都支持集群化部署,避免出现单点故障。

3.调用中心和执行器之间通过HTTP协议进行通信,因此需要把它们部署在能相互连通的网络环境。

安装部署

基于v2.3.0版本进行说明。

调度中心

调度中心是与业务无关的,直接从源码编译部署即可。

这里下载最新的项目源码压缩包,解压到本地。

第一步:初始化调度中心数据库

SQL语句文件位于项目源码目录中,路径:项目源码目录\doc\db\tables_xxl_job.sql
初始化数据库及表的操作比较简单,具体实现省略。

第二步:编译调度中心运行包

(1)进入到解压后的项目源码目录,打开配置文件项目源码目录\xxl-job-admin\src\main\resources\application.properties

(2)修改配置参数:在此之前需要通过【第一步】完成调度中心数据库的创建和登录授权的设置。

  • 修改数据库连接参数
### xxl-job, datasource
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.cj.jdbc.Driver
  • 修改报警邮件配置信息
### xxl-job, email
spring.mail.host=smtp.qq.com # 邮件服务器主机
spring.mail.port=25 # 邮件服务器端口
spring.mail.username=xxx@qq.com # 邮件账户
spring.mail.from=xxx@qq.com # 发送邮件账号,通常跟spring.mail.username值一致
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

(3)编译调度中心运行包

进入到项目源码目录,执行:mvn clean package,将会在“项目源码目录\xxl-job-admin\target”路径下生成调度中心运行jar包:xxl-job-admin-${version}.jar

第三步:运行调度中心

将jar包拷贝到服务器,执行:java -jar xxl-job-admin-${version}.jar即可运行并启动调度中心进程。

如果是在IDE中进行调试,可以在修改配置参数之后直接运行即可。

调度中心启动成功之后,访问:http://服务器主机地址:8080/xxl-job-admin 打开调度中心管理界面。

默认用户名/密码:admin/123456

任务执行器

任务执行器是跟具体业务绑定的程序逻辑,需要单独开发。

xxl-job框架支持2种开发任务执行器的方式:

1.GLUE模式:在xxl-job管理后台动态编辑任务执行代码并执行。

2.BEAN模式:这应该是使用得最多的方式,使用这种方式运行的执行器是一个需要独立部署的程序。

GLUE模式任务执行器

略。

BEAN模式任务执行器

在官方给出的示例中,推荐使用基于Spring Boot框架开发任务执行器,详细开发步骤如下:

1.新建基于Spring Boot框架的Maven项目(如果是在已经存在的Spring Boot项目中添加xxl-job任务执行器,这一步忽略)。

2.添加xxl-job核心依赖

<!-- https://mvnrepository.com/artifact/com.xuxueli/xxl-job-core -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.0</version>
</dependency>

3.配置执行器运行参数

配置文件:src\main\resources\application.properties

需要配置的核心参数是2个:

(1)xxl.job.admin.addresses:调度中心地址

(2)xxl.job.executor.appname:任务执行器名称,这个参数用于在调度中心注册执行器

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

4.配置执行器组件

@Configuration
@Slf4j
public class JobExecutorConfig {
@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注入到Spring容器中
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
log.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}

5.编写任务执行器方法

// 任务执行器类本身也需要注入到Spring容器中
@Component
public class SimpleJobHandler {
// 使用xxl-job-core提供的注解@XxlJob 标注这是一个执行器方法
@XxlJob("simpleHandler")
public void simpleHandler() throws InterruptedException {
XxlJobHelper.log("XXL-JOB, Hello World."); for (int i = 0; i < 5; i++) {
XxlJobHelper.log("beat at:" + i);
TimeUnit.SECONDS.sleep(2);
}
// default success
}
}

6.启动任务执行器

将任务执行器项目打包,部署到服务器启动。

如果在IDE中开发调试,直接启动即可。

至此,调度中心还不知道该任务执行器的存在,所以在调度中心创建定时任务时无法选择该执行器,需要在调度中心手动添加该执行器。

回调调度中心管理界面,在左侧菜单栏选择【执行器管理】,单击【新增】,在弹出框中输入新创建的执行器信息:

  • AppName:在执行器项目配置文件中设置的属性xxl.job.executor.appname值,如:xxl-job-executor-test
  • 名称:在执行器方法中使用注解@XxlJob指定的字符串名称,如:simpleHandler
  • 注册方式:自动注册

点击【保存】按钮。

此时,就可以在调度中心的【执行器管理】界面中看到刚刚添加的任务执行器了。

通过上述步骤完成任务执行器在调度中心的注册操作之后,就可以在调度中心添加定时任务时选择对应的任务执行器了。

依赖的底层框架及核心技术

1.netty:提供http服务

https://github.com/netty/netty

2.Hessian

http://hessian.caucho.com

3.自研任务调度器

其他任务调度系统

https://github.com/PowerJob/PowerJob PowerJob

XXL-Job框架入门介绍的更多相关文章

  1. iOS7新JavaScriptCore框架入门介绍

    前阵子,Apple正式发布了新的iOS 7系统,最大最直观的改变在于界面变得小清新范了,我也提到<iOS,你真的越来越像Android了>.不过对于移动开发者来说,除了要适应Xcode 5 ...

  2. ActiveMQ:JMS开源框架入门介绍

    介绍基本的JMS概念与开源的JMS框架ActiveMQ应用,内容涵盖一下几点: 基本的JMS概念 JMS的消息模式 介绍ActiveMQ 一个基于ActiveMQ的JMS例子程序 一:JMS基本概念 ...

  3. Java集合框架入门介绍(一)

    Java工具包(java.util)提供了强大的数据结构,主要有以下几种接口或类 枚举Enumeration 接口 从数据集合中取回一系列连续值的方法 位集合 BitSet 可以单独清楚或设置的位和标 ...

  4. Dubbo框架入门介绍

    背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时,只需一个 ...

  5. vue框架入门和ES6介绍

    vue框架入门和ES6介绍 vue-mvvm模式,vue是一种轻量级的前端框架,主要为模板渲染,数据同步,组件化,模块化,路由等. https://cn.vuejs.org/ 源码:https://g ...

  6. BitAdminCore框架应用篇:(三)核心套件querySuite入门介绍

    索引 NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/coo ...

  7. .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

    Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...

  8. RPC通信框架——RCF介绍

    现有的软件中用了大量的COM接口,导致无法跨平台,当然由于与Windows结合的太紧密,还有很多无法跨平台的地方.那么为了实现跨平台,支持Linux系统,以及后续的分布式,首要任务是去除COM接口. ...

  9. 【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战

    概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能. ...

  10. 【原创】NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战

    前言 本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo.服务端将分别用MINA2和Netty4进行实现,而通信时服务端你只需选其一就行了.同 ...

随机推荐

  1. [转帖]linux求数组的交集,shell/bash 交集、并集、差集

    方法一(直接用文件名):取两个文本文件的并集.交集.差集 并: sort -m 交: sort -m 差 file1 - file2: sort -m 方法二(用变量参数):取两个文本文件的并集.交集 ...

  2. [转帖]OutOfMemoryError内存溢出相关的JVM参数

    原文在这里: OutOfMemoryError内存溢出相关的JVM参数 JVM提供了很多处理内存溢出的相关参数,本文主要来讲解下这些参数,当你遇到内存溢出的时候可能会对你非常有帮助,这些参数主要有: ...

  3. 【译文】IEEE白皮书 6G 太赫兹技术的基本原理 2023版

    第一章 简介 太赫兹波是介于微波和光波之间的光谱区域,频率从 0.1THz ~ 10THz 之间,波长在 3mm ~ 30μm 之间.提供大块连续的频带范围以满足对 Tbit/s 内极高数据传输速率的 ...

  4. 买彩票能中大奖?用Java盘点常见的概率悖论 | 京东云技术团队

    引言 <双色球头奖概率与被雷劈中的概率哪个高?> <3人轮流射击,枪法最差的反而更容易活下来?> 让我们用Java来探索ta们! 悖论1:著名的三门问题 规则描述:你正在参加一 ...

  5. 我在京东做研发 | 揭秘支撑京东万人规模技术人员协作的行云DevOps平台

    随着业务变化的速度越来越快各类IT系统的建设也越来越复杂大规模研发团队的管理问题日益突出如何提升研发效能成为时下各类技术团队面临的重要挑战 京东云DevOps专家将带您深入研发一线揭秘支撑京东集团万人 ...

  6. 结论&定理大全

    定理 1:包含 \(0\) 与 \(2^k-1\) 的按位与或空间和 \(k\) 个点的有传递性的有向图形成双射 证明: 空间->传递闭包:对于任意两个位 \(i,j\),若某个数包含 \(i\ ...

  7. 【笔记】grafana v8.4.2 中如何设置曲线图的双坐标轴

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu 公众号:一本正经的瞎扯 这个话题当然很久就有人研究过了,只不过版本已经很老了,不适合新版本. 1 ...

  8. 从零开始的知识图谱生活,构建一个百科知识图谱,完成基于Deepdive的知识抽取、基于ES的简单语义搜索、基于 REfO 的简单KBQA

    从零开始的知识图谱生活,构建一个百科知识图谱,完成基于Deepdive的知识抽取.基于ES的简单语义搜索.基于 REfO 的简单KBQA 个人入门知识图谱过程中的学习笔记,算是半教程类的,指引初学者对 ...

  9. FFmpeg的录制命令

    FFmpeg的录制命令 命令的作用 它可以捕捉桌面窗口,摄像头的视频流和麦克风的音频流. 命令的格式 ffmpeg [输入格式] [输入选项] -i [输入设备索引] [输出选项] 输出文件 其中输入 ...

  10. Axure谷歌浏览器扩展程序下载及安装方法(免FQ)

    在用Axure在chrome查看原型时,没有安装Axure谷歌浏览器插件时无法显示会有提示信息,如果未FQ按照提示是无法直接安装扩展程序的,这里提供插件下载地址并教大家如何安装插件. 平时在使用谷歌浏 ...