@ -17,7 +17,7 @@
### 1.1 概述
XXL-JOB是一个分布式任务调度平台, 其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线, 开箱即用。
### 1.2 社区交流
### 1.2 社区交流
- [社区交流 ](https://www.xuxueli.com/page/community.html )
### 1.3 特性
@ -736,6 +736,41 @@ XXL-JOB是一个分布式任务调度平台, 其核心设计目标是开发迅
- 640、再造再生健康科技有限公司
- 641、华宝证券
- 642、卓正医疗
- 643、深圳湛信科技
- 644、陕西鑫众为软件有限公司
- 645、深圳市润农科技有限公司
- 646、庚商教育智能科技有限公司
- 647、杭州祎声科技
- 648、四川久远银海软件股份有限公司
- 649、GeeFox极狐低代码
- 650、浙江和仁科技股份有限公司
- 651、宁波聚臻智能科技有限公司
- 652、福建福昕软件开发股份有限公司【福昕】
- 653、广州中长康达信息技术有限公司
- 654、武汉趣改信息科技有限公司
- 655、北京华夏思源科技发展有限公司
- 656、宁波关关通科技有限公司
- 657、青岛吕氏餐饮有限公司
- 658、杭州乐刻网络科技有限公司
- 659、上海红瓦信息科技有限公司
- 660、陕西旅小宝信息科技有限公司
- 661、中科卓恒(大连)科技有限公司
- 662、北京华益精点生物技术有限公司
- 663、马士基( 中国) 航运有限公司【马士基】
- 664、陕西美咚网络科技有限公司
- 665、山东新北洋信息技术股份有限公司
- 666、福建中瑞文化发展集团有限公司
- 667、黑龙江省建工集团有限责任公司【黑龙江省建工】
- 668、志信能达安全科技(广州)有限公司
- 669、重庆开源共创科技有限公司
- 670、华泰人寿保险股份有限公司【华泰人寿】
- 671、成都盘古纵横集团
- 672、北京果果乐学科技有限公司
- 673、北京凌云空间科技有限公司
- 674、临工重机股份有限公司
- 675、上海热风时尚管理集团【热风】
- 676、HashKey Exchange
- 677、傲基( 深圳) 跨境商务股份有限公司
- ……
> 更多接入的公司,欢迎在 [登记地址 ](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。
@ -756,6 +791,7 @@ XXL-JOB是一个分布式任务调度平台, 其核心设计目标是开发迅
--- | ---
[https://github.com/xuxueli/xxl-job ](https://github.com/xuxueli/xxl-job ) | [Download ](https://github.com/xuxueli/xxl-job/releases )
[http://gitee.com/xuxueli0323/xxl-job ](http://gitee.com/xuxueli0323/xxl-job ) | [Download ](http://gitee.com/xuxueli0323/xxl-job/releases )
[https://gitcode.com/xuxueli0323/xxl-job ](https://gitcode.com/xuxueli0323/xxl-job ) | [Download ](https://gitcode.com/xuxueli0323/xxl-job/tags )
#### 中央仓库地址
@ -797,7 +833,7 @@ XXL-JOB是一个分布式任务调度平台, 其核心设计目标是开发迅
xxl-job-executor-samples: 执行器Sample示例( 选择合适的版本执行器, 可直接使用, 也可以参考其并将现有项目改造成执行器)
: xxl-job-executor-sample-springboot: Springboot版本, 通过Springboot管理执行器, 推荐这种方式;
: xxl-job-executor-sample-frameless: 无框架版本;
### 2.3 配置部署“调度中心”
@ -840,8 +876,8 @@ XXL-JOB是一个分布式任务调度平台, 其核心设计目标是开发迅
### 调度中心日志表数据保存天数 [必填]: 过期日志自动清理; 限制大于等于7时生效, 否则, 如-1, 关闭自动清理功能;
xxl.job.logretentiondays=30
#### 步骤二:部署项目:
如果已经正确进行上述配置,可将项目编译打包部署。
@ -875,8 +911,6 @@ docker pull xuxueli/xxl-job-admin
- 创建容器并运行
```
docker run -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin -d xuxueli/xxl-job-admin:{指定版本}
/**
* 如需自定义 mysql 等配置,可通过 "-e PARAMS" 指定,参数格式 PARAMS="--key=value --key2=value2" ;
* 配置项参考文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties
@ -890,10 +924,10 @@ docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_jo
“执行器”项目: xxl-job-executor-sample-springboot (提供多种版本执行器供选择,现以 springboot 版本为例,可直接使用,也可以参考其并将现有项目改造成执行器)
作用:负责接收“调度中心”的调度并执行;可直接部署执行器,也可以将执行器集成到现有业务项目中。
#### 步骤一: maven依赖
确认pom文件中引入了 "xxl-job-core" 的maven依赖;
#### 步骤二:执行器配置
执行器配置,配置文件地址:
@ -919,7 +953,7 @@ docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_jo
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
xxl.job.executor.logretentiondays=30
#### 步骤三:执行器组件配置
@ -951,7 +985,7 @@ public XxlJobSpringExecutor xxlJobExecutor() {
xxl-job-executor-sample-springboot: 项目编译打包成springboot类型的可执行JAR包, 命令启动即可;
xxl-job-executor-sample-frameless: 项目编译打包成JAR包, 命令启动即可;
至此“执行器”项目已经部署结束。
@ -959,11 +993,11 @@ public XxlJobSpringExecutor xxlJobExecutor() {
执行器支持集群部署,提升调度系统可用性,同时提升任务处理能力。
执行器集群部署时,几点要求和建议:
- 执行器回调地址( xxl.job.admin.addresses) 需要保持一致; 执行器根据该配置进行执行器自动注册等操作。
- 执行器回调地址( xxl.job.admin.addresses) 需要保持一致; 执行器根据该配置进行执行器自动注册等操作。
- 同一个执行器集群内AppName( xxl.job.executor.appname) 需要保持一致; 调度中心根据该配置动态发现不同集群的在线执行器列表。
### 2.5 开发第一个任务“Hello World”
### 2.5 开发第一个任务“Hello World”
本示例以新建一个 “GLUE模式(Java)” 运行模式的任务为例。更多有关任务的详细配置,请查看“章节三:任务详解”。
( “GLUE模式(Java)”的执行代码托管到调度中心在线维护, 相比“Bean模式任务”需要在执行器项目开发部署上线, 更加简便轻量)
@ -988,7 +1022,7 @@ public XxlJobSpringExecutor xxlJobExecutor() {
#### 步骤三:触发执行:
请点击任务右侧 “执行” 按钮, 可手动触发一次任务执行( 通常情况下, 通过配置Cron表达式进行任务调度触发) 。
#### 步骤四:查看日志:
#### 步骤四:查看日志:
请点击任务右侧 “日志” 按钮,可前往任务日志界面查看任务日志。
在任务日志界面中,可查看该任务的历史调度记录以及每一次调度的任务调度信息、执行参数和执行信息。运行中的任务点击右侧的“执行日志”按钮,可进入日志控制台查看实时执行日志。
@ -1027,7 +1061,7 @@ public XxlJobSpringExecutor xxlJobExecutor() {
GLUE模式(PHP):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "php" 脚本;
GLUE模式(NodeJS):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "nodejs" 脚本;
GLUE模式(PowerShell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "PowerShell" 脚本;
- JobHandler: 运行模式为 "BEAN模式" 时生效, 对应执行器中新开发的JobHandler类“@JobHandler ”注解自定义的value值;
- JobHandler: 运行模式为 "BEAN模式" 时生效, 对应执行器中新开发的JobHandler类“@Xxl Job”注解自定义的value值;
- 执行参数:任务执行所需的参数;
高级配置:
@ -1052,11 +1086,11 @@ public XxlJobSpringExecutor xxlJobExecutor() {
覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务;
- 任务超时时间:支持自定义任务超时时间,任务运行超时将会主动中断任务;
- 失败重试次数;支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;
### 3.1 BEAN模式( 类形式)
Bean模式任务, 支持基于类的开发方式, 每个任务对应一个Java类。
@ -1095,7 +1129,7 @@ Bean模式任务, 支持基于方法的开发方式, 每个任务对应一个
2、注解配置: 为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")", 注解value值对应的是调度中心新建任务的JobHandler属性的值。
3、执行日志: 需要通过 "XxlJobHelper.log" 打印执行日志;
4、任务结果: 默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果;
```
// 可参考Sample示例执行器中的 "com.xxl.job.executor.service.jobhandler.SampleXxlJob" ,如下:
@XxlJob ("demoJobHandler")
@ -1140,7 +1174,7 @@ public void demoJobHandler() throws Exception {
### 3.4 GLUE模式(Shell)
#### 步骤一:调度中心,新建调度任务
#### 步骤一:调度中心,新建调度任务
参考上文“配置属性详细说明”对新建的任务进行参数配置,运行模式选中 "GLUE模式(Shell)";
#### 步骤二:开发任务代码:
@ -1152,7 +1186,7 @@ public void demoJobHandler() throws Exception {
### 3.4 GLUE模式(Python)
#### 步骤一:调度中心,新建调度任务
#### 步骤一:调度中心,新建调度任务
参考上文“配置属性详细说明”对新建的任务进行参数配置,运行模式选中 "GLUE模式(Python)";
#### 步骤二:开发任务代码:
@ -1164,7 +1198,7 @@ public void demoJobHandler() throws Exception {
### 3.5 GLUE模式(NodeJS)
#### 步骤一:调度中心,新建调度任务
#### 步骤一:调度中心,新建调度任务
参考上文“配置属性详细说明”对新建的任务进行参数配置,运行模式选中 "GLUE模式(NodeJS)";
#### 步骤二:开发任务代码:
@ -1330,11 +1364,11 @@ XXL-JOB调度模块基于自研调度组件并支持集群部署, 调度数据
#### 5.3.2 系统组成
- ** 调度模块(调度中心)**:
负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;
支持可视化、简单且动态的管理调度信息, 包括任务新建, 更新, 删除, GLUE开发和任务报警等, 所有上述操作都会实时生效, 同时支持监控调度结果以及执行日志, 支持执行器Failover。
负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;
支持可视化、简单且动态的管理调度信息, 包括任务新建, 更新, 删除, GLUE开发和任务报警等, 所有上述操作都会实时生效, 同时支持监控调度结果以及执行日志, 支持执行器Failover。
- ** 执行模块(执行器)**:
负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;
接收“调度中心”的执行请求、终止请求和日志请求等。
负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;
接收“调度中心”的执行请求、终止请求和日志请求等。
#### 5.3.3 架构图
@ -1343,7 +1377,7 @@ XXL-JOB调度模块基于自研调度组件并支持集群部署, 调度数据
### 5.4 调度模块剖析
#### 5.4.1 quartz的不足
Quartz作为开源作业调度中的佼佼者, 是作业调度的首选。但是集群环境中Quartz采用API的方式对任务进行管理, 从而可以避免上述问题, 但是同样存在以下问题:
- 问题一: 调用API的的方式操作任务, 不人性化;
- 问题二: 需要持久化业务QuartzJobBean到底层数据表中, 系统侵入性相当严重。
- 问题三: 调度逻辑和QuartzJobBean耦合在同一个项目中, 这将导致一个问题, 在调度任务数量逐渐增多, 同时调度任务逻辑逐渐加重的情况下, 此时调度系统的性能将大大受限于业务;
@ -1440,7 +1474,7 @@ xxl-job-admin#com.xxl.job.admin.controller.JobApiController.callback
如若需要支撑更多的任务量,可以通过 "调大调度线程数" 、"降低调度中心与执行器ping延迟" 和 "提升机器配置" 几种方式优化。
#### 5.4.12 均衡调度
#### 5.4.12 均衡调度
调度中心在集群部署时会自动进行任务平均分配,触发组件每次获取与线程池数量(调度中心支持自定义调度线程池大小)相关数量的任务,避免大量任务集中在单个调度中心集群节点;
### 5.5 任务 "运行模式" 剖析
@ -1469,7 +1503,7 @@ xxl-job-admin#com.xxl.job.admin.controller.JobApiController.callback
#### 5.5.4 执行器
执行器实际上是一个内嵌的Server, 默认端口9999( 配置项: xxl.job.executor.port) 。
在项目启动时,执行器会通过“@JobHandler ”识别Spring容器中“Bean模式任务”, 以注解的value属性为key管理起来。
在项目启动时,执行器会通过“@Xxl Job”识别Spring容器中“Bean模式任务”, 以注解的value属性为key管理起来。
“执行器”接收到“调度中心”的调度请求时, 如果任务类型为“Bean模式”, 将会匹配Spring容器中的“Bean模式任务”, 然后调用其execute方法, 执行任务逻辑。如果任务类型为“GLUE模式”, 将会加载GLue代码, 实例化Java对象, 注入依赖的Spring服务( 注意: Glue代码中注入的Spring服务, 必须存在与该“执行器”项目的Spring容器中) , 然后调用execute方法, 执行任务逻辑。
@ -1484,7 +1518,7 @@ XXL-JOB会为每次调度请求生成一个单独的日志文件, 需要通过
### 5.6 通讯模块剖析
#### 5.6.1 一次完整的任务调度通讯流程
#### 5.6.1 一次完整的任务调度通讯流程
- 1、“调度中心”向“执行器”发送http调度请求: “执行器”中接收请求的服务, 实际上是一台内嵌Server, 默认端口9999;
- 2、“执行器”执行任务逻辑;
- 3、“执行器”http回调“调度中心”调度结果: “调度中心”中接收回调的服务, 是针对执行器开放一套API服务;
@ -1492,14 +1526,14 @@ XXL-JOB会为每次调度请求生成一个单独的日志文件, 需要通过
#### 5.6.2 通讯数据加密
调度中心向执行器发送的调度请求时使用RequestModel和ResponseModel两个对象封装调度请求参数和响应数据, 在进行通讯之前底层会将上述两个对象对象序列化,并进行数据协议以及时间戳检验,从而达到数据加密的功能;
### 5.7 任务注册, 任务自动发现
### 5.7 任务注册, 任务自动发现
自v1.5版本之后, 任务取消了"任务执行机器"属性, 改为通过任务注册和自动发现的方式, 动态获取远程执行器地址并执行。
AppName: 每个执行器机器集群的唯一标示, 任务注册以 "执行器" 为最小粒度进行注册; 每个任务通过其绑定的执行器可感知对应的执行器机器列表;
注册表: 见"xxl_job_registry"表, "执行器" 在进行任务注册时将会周期性维护一条注册记录, 即机器地址和AppName的绑定关系; "调度中心" 从而可以动态感知每个AppName在线的机器列表;
执行器注册: 任务注册Beat周期默认30s; 执行器以一倍Beat进行执行器注册, 调度中心以一倍Beat进行动态任务发现; 注册信息的失效时间为三倍Beat;
执行器注册摘除:执行器销毁时,将会主动上报调度中心并摘除对应的执行器机器信息,提高心跳注册的实时性;
为保证系统"轻量级"并且降低学习部署成本, 没有采用Zookeeper作为注册中心, 采用DB方式进行任务注册发现;
@ -1508,7 +1542,7 @@ XXL-JOB会为每次调度请求生成一个单独的日志文件, 需要通过
当返回值符合 "ReturnT.code == ReturnT.SUCCESS_CODE" 时表示任务执行成功,否则表示任务执行失败,而且可以通过 "ReturnT.msg" 回调错误信息给调度中心;
从而,在任务逻辑中可以方便的控制任务执行结果;
### 5.9 分片广播 & 动态分片
### 5.9 分片广播 & 动态分片
执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发对应集群中所有执行器执行一次任务,同时系统自动传递分片参数;可根据分片参数开发分片任务;
"分片广播" 以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。
@ -1527,7 +1561,7 @@ int shardTotal = XxlJobHelper.getShardTotal();
echo "分片序号 index = $2"
echo "分片总数 total = $3"
```
分片参数属性说明:
index: 当前分片序号(从0开始),执行器集群列表中当前执行器的序号;
@ -1549,7 +1583,7 @@ echo "分片总数 total = $3"
### 5.11 故障转移 & 失败重试
一次完整任务流程包括"调度(调度中心) + 执行(执行器)"两个阶段。
- "故障转移"发生在调度阶段, 在执行器集群部署时, 如果某一台执行器发生故障, 该策略支持自动进行Failover切换到一台正常的执行器机器并且完成调度请求流程。
- "失败重试"发生在"调度 + 执行"两个阶段,支持通过自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;
@ -1561,7 +1595,7 @@ echo "分片总数 total = $3"
- 1、执行器改为手动注册, 下线一半机器列表( A组) , 线上运行另一半机器列表( B组) ;
- 2、等待A组机器任务运行结束并编译上线; 执行器注册地址替换为A组;
- 3、等待B组机器任务运行结束并编译上线; 执行器注册地址替换为A组+B组;
操作结束;
操作结束;
### 5.13 任务执行结果说明
系统根据以下标准判断任务执行结果,可参考之。
@ -1589,15 +1623,15 @@ XXL-JOB是一个跨语言的任务调度平台, 主要体现在如下几个方
可以通过以下命令快速构建调度中心,并启动运行;
```
mvn clean package
docker build -t xuxueli/xxl-job-admin ./xxl-job-admin
docker build -t xuxueli/xxl-job-admin:{version} ./xxl-job-admin
docker run --name xxl-job-admin -p 8080:8080 -d xuxueli/xxl-job-admin
```
### 5.20 避免任务重复执行
### 5.20 避免任务重复执行
调度密集或者耗时任务可能会导致任务阻塞,集群情况下调度组件小概率情况下会重复触发;
针对上述情况,可以通过结合 "单机路由策略(如:第一台、一致性哈希)" + "阻塞策略(如:单机串行、丢弃后续调度)" 来规避,最终避免任务重复执行。
针对上述情况,可以通过结合 "单机路由策略(如:第一台、一致性哈希)" + "阻塞策略(如:单机串行、丢弃后续调度)" 来规避,最终避免任务重复执行。
### 5.21 命令行任务
### 5.21 命令行任务
原生提供通用命令行任务Handler( Bean任务, "CommandJobHandler");业务方只需要提供命令行即可;
如任务参数 "pwd" 将会执行命令并输出数据;
@ -1659,7 +1693,7 @@ Header:
"msg": null // 错误提示消息
}
```
#### b、执行器注册
```
说明:执行器注册时使用,调度中心会实时感知注册成功的执行器并发起任务调度
@ -1818,7 +1852,7 @@ Header:
#### d、查看执行日志
```
说明:终止任务 ,滚动方式加载
说明:查看任务日志 ,滚动方式加载
------
@ -1867,35 +1901,35 @@ Header:
- 3、底层通讯支持两种方式, Servlet方式 + JETTY方式;
- 4、支持“任务日志”;
- 5、支持“串行执行”, 并行执行;
说明: V1.2版本将系统架构按功能拆分为:
- 调度模块(调度中心):负责管理调度信息,按照调度配置发出调度请求;
- 执行模块(执行器):负责接收调度请求并执行任务逻辑;
- 通讯模块:负责调度模块和任务模块之间的信息通讯;
优点:
- 解耦:任务模块提供任务接口,调度模块维护调度信息,业务相互独立;
- 高扩展性;
- 稳定性;
说明: V1.2版本将系统架构按功能拆分为:
- 调度模块(调度中心):负责管理调度信息,按照调度配置发出调度请求;
- 执行模块(执行器):负责接收调度请求并执行任务逻辑;
- 通讯模块:负责调度模块和任务模块之间的信息通讯;
优点:
- 解耦:任务模块提供任务接口,调度模块维护调度信息,业务相互独立;
- 高扩展性;
- 稳定性;
### 7.3 版本 V1.3.0,新特性[2016-05-19]
- 1、遗弃“本地任务”模式, 推荐使用“远程任务”, 易于系统解耦, 任务对应的JobHandler统称为“执行器”;
- 2、遗弃“servlet”方式底层系统通讯, 推荐使用JETTY方式, 调度+回调双向通讯,重构通讯逻辑;
- 3、UI交互优化: 左侧菜单展开状态优化, 菜单项选中状态优化, 任务列表打开表格有压缩优化;
- 4、【重要】“执行器”细分为: BEAN、GLUE两种开发模式, 简介见下文:
“执行器” 模式简介:
- BEAN模式执行器: 每个执行器都是Spring的一个Bean实例, XXL-JOB通过注解@JobHandler识别和调度执行器;
-GLUE模式执行器: 每个执行器对应一段代码, 在线Web编辑和维护, 动态编译生效, 执行器负责加载GLUE代码和执行;
“执行器” 模式简介:
- BEAN模式执行器: 每个执行器都是Spring的一个Bean实例, XXL-JOB通过注解@JobHandler识别和调度执行器;
-GLUE模式执行器: 每个执行器对应一段代码, 在线Web编辑和维护, 动态编译生效, 执行器负责加载GLUE代码和执行;
### 7.4 版本 V1.3.1,新特性[2016-05-23]
- 1、更新项目目录结构:
- /xxl-job-admin -------------------- 【调度中心】:负责管理调度信息,按照调度配置发出调度请求;
- /xxl-job-core ----------------------- 公共依赖
- /xxl-job-executor-example ------ 【执行器】:负责接收调度请求并执行任务逻辑;
- /db ---------------------------------- 建表脚本
- /doc --------------------------------- 用户手册
- /xxl-job-admin -------------------- 【调度中心】:负责管理调度信息,按照调度配置发出调度请求;
- /xxl-job-core ----------------------- 公共依赖
- /xxl-job-executor-example ------ 【执行器】:负责接收调度请求并执行任务逻辑;
- /db ---------------------------------- 建表脚本
- /doc --------------------------------- 用户手册
- 2、在新的目录结构上, 升级了用户手册;
- 3、优化了一些交互和UI;
@ -1909,7 +1943,7 @@ Header:
- 2、执行器底层实现代码进行重度重构, 优化底层建表脚本;
- 3、执行器中任务线程分组逻辑优化: 之前根据执行器JobHandler进行线程分组,当多个任务复用Jobhanlder会导致相互阻塞。现改为根据调度中心任务进行任务线程分组,任务与任务执行相互隔离;
- 4、执行器调度通讯方案优化, 通过Hex + HC实现建议RPC通讯协议, 优化了通讯参数的维护和解析流程;
- 5、调度中心, 新建/编辑任务, 界面属性调整:
- 5、调度中心, 新建/编辑任务, 界面属性调整:
- 5.1、任务新增/编辑界面中去除 "任务名JobName"属性 ,该属性改为系统自动生成: 该字段之前主要用于在 "调度中心" 唯一标示一个任务, 现实意义不大, 因此计划淡化掉该字段,改为系统生成UUID,从而简化任务新建的操作;
- 5.2、任务新增/编辑界面中去除 "GLUE模式" 复选框位置调整, 改为贴近"JobHandler"输入框右侧;
- 5.3、任务新增/编辑界面中去除 "报警阈值" 属性;
@ -1924,7 +1958,7 @@ Header:
Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段, 地址见分支 [V1.3 ](https://github.com/xuxueli/xxl-job/tree/v1.3 ) 。新特性将会在master分支持续更新。
### 7.7 版本 V1.4.1 新特性[2016-09-06]
- 1、项目成功推送maven中央仓库, 中央仓库地址以及依赖如下:
- 1、项目成功推送maven中央仓库, 中央仓库地址以及依赖如下:
```
<!-- http://repo1.maven.org/maven2/com/xuxueli/xxl - job - core/ -->
< dependency >
@ -2052,7 +2086,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
- 11、统一maven依赖版本管理;
### 7.20 版本 V1.8.2 特性[2017-09-04]
- 1、项目主页搭建: 提供中英文文档: https://www.xuxueli.com/xxl-job
- 1、项目主页搭建: 提供中英文文档: https://www.xuxueli.com/xxl-job
- 2、JFinal执行器Sample示例项目;
- 3、事件触发: 除了"Cron方式"和"任务依赖方式"触发任务执行之外, 支持基于事件的触发任务方式。调度中心提供触发任务单次执行的API服务, 可根据业务事件灵活触发。
- 4、执行器摘除: 执行器销毁时, 主动通知调度中心并摘除对应执行器节点, 提高执行器状态感知的时效性。
@ -2147,7 +2181,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
- 38、GLUE任务脚本字段类型调整, 改为mediumtext类型, 提高GLUE长度上限;
- 39、任务监控线程Log输出优化, 运行中任务的监控Log改为debug级别, 减少非核心日志量;
- 40、项目依赖全量升级至较新稳定版本, 如spring、Jackson、groovy等等;
- 41、docker支持: 调度中心提供 Dockerfile 方便快速构建docker镜像;
- 41、docker支持: 调度中心提供 Dockerfile 方便快速构建docker镜像;
### 7.24 版本 V2.0.0 Release Notes[2018-11-04]
- 1、调度中心迁移到 springboot;
@ -2159,7 +2193,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
- 7、任务状态规范: 新增任务默认停止状态, 任务更新时保持任务状态不变;
- 8、IP获取逻辑优化, 优先遍历网卡来获取可用IP;
- 9、任务新增的API服务接口返回任务ID, 方便调用方实用;
- 10、组件化优化, 移除对 spring 的依赖: 非spring应用选用 "XxlJobExecutor" 、spring应用选用 "XxlJobSpringExecutor" 作为执行器组件;
- 10、组件化优化, 移除对 spring 的依赖: 非spring应用选用 "XxlJobExecutor" 、spring应用选用 "XxlJobSpringExecutor" 作为执行器组件;
- 11、任务RollingLog展示逻辑优化, 修复超时任务无法查看的问题;
- 12、多项UI组件升级到最新版本, 如: CodeMirror、Echarts、Jquery 等;
- 13、项目依赖升级 groovy 至较新稳定版本; pom清理;
@ -2293,7 +2327,7 @@ data: post-data
- 20、修复bootstrap.min.css.map 404问题;
- 21、执行器UI交互优化,移除冗余order属性;
- 22、执行备注消息长度限制, 修复数据超长无法存储导致导致回调失败的问题;
注意: XxlJobSpringExecutor组件个别字段调整: “appName” 调整为 “appname” ,升级时该组件时需要注意;
注意: XxlJobSpringExecutor组件个别字段调整: “appName” 调整为 “appname” ,升级时该组件时需要注意;
### 7.31 版本 v2.3.0 Release Notes[2021-02-09]
- 1、【新增】调度过期策略: 调度中心错过调度时间的补偿处理策略, 包括: 忽略、立即补偿触发一次等;
@ -2331,7 +2365,7 @@ public void execute() {
- 24、【修复】执行器注册表字段优化, 解决执行器注册节点过多导致注册信息存储和更新失败的问题;
- 25、【修复】轮训路由策略优化, 修复小概率下并发问题;
- 26、【修复】页面redirect跳转后https变为http问题修复;
- 27、【修复】执行器日志清理优化, 修复小概率下日志文件为空导致清理异常问题;
- 27、【修复】执行器日志清理优化, 修复小概率下日志文件为空导致清理异常问题;
### 7.32 版本 v2.3.1 Release Notes[2022-05-21]
- 1、【修复】修复风险漏洞, 升级问题低版本项目依赖: CVE-2021-2471、CVE-2022-22965等。
@ -2341,17 +2375,39 @@ public void execute() {
- 5、【优化】任务线程名优化, 提升可读性与问题定位效率(ISSUE-2527)。
### 7.33 版本 v2.4.0 Release Notes[2023-03-23]
- 1、【优化】执行器任务Bean扫描逻辑优化: 解决懒加载注解失效问题。
- 1、【优化】执行器任务Bean扫描逻辑优化: 解决懒加载注解失效问题;
- 2、【优化】多个项目依赖升级至较新稳定版本, 涉及netty、groovy、spring、springboot、mybatis等;
- 3、【修复】"CVE-2022-36157" 授权漏洞修复。
- 4、【修复】"CVE-2022-43183" SSRF漏洞修复。
- 3、【修复】漏洞修复, 包括: "CVE-2022-36157" 授权漏洞修复;"CVE-2022-43183" SSRF漏洞修复;
### 7.34 版本 v2.4.1 Release Notes[规划中 ]
### 7.34 版本 v2.4.1 Release Notes[2024-04-17 ]
- 1、【优化】多个项目依赖升级至较新稳定版本, 涉及netty、groovy、springboot、mybatis等;
- 2、【修复】"CVE-2022-43402" groovy低版本漏洞修复。
- 3、【修复】调度日志页面XSS漏洞修复(ISSUE-3360)。
- 4、[规划中]注册节点,弹框分页展示;解决注册节点过多时无法展示问题;
- 2、【优化】执行器注册节点显示交互调整, 优化注册节点过多时展示不全体验;
- 3、【修复】漏洞修复, 包括: "CVE-2022-43402" groovy低版本漏洞修复; "CVE-2024-29025" netty低版本漏洞修复; "CVE-2024-3366" freemarker模板注入漏洞修复; "CVE-2022-43183" 越权漏洞增强修复;
- 4、【修复】调度日志页面XSS问题修复(ISSUE-3360)。
### 7.35 版本 v2.4.2 Release Notes[2024-11-16]
- 1、【优化】调度中心任务Next计算逻辑调整, 避免Cron解析失败导致重复执行问题。
- 2、【优化】Cron解析组件代码重构微调, 健壮性提升;
- 3、【优化】修改密码交互调整, 避免CSRF隐患;
- 4、【优化】JdkSerializeTool流关闭逻辑优化;
- 5、【优化】任务信息、执行日志API非功能设计完善, 避免越权隐患;
- 6、【修复】漏洞修复, 包括 "CVE-2024-42681" 子任务越权漏洞修复、"CVE-2023-33779" 任务API越权问题修复;
- 7、【升级】多个项目依赖升级至较新稳定版本, 涉及netty、groovy、gson、springboot、mybatis等;
**备注:**
- a、“CVE-2024-38820”漏洞源自spring, 当前使用spring5.x及springboot2.x软件普遍受该问题影响。 该问题修复需要升级至spring6.x与springboot3.x, 同时需要升级JDK17, 如有诉求可自行升级。计划下个大版本升级spring及jdk版本解决该问题。
- b、本次升级数据模型及通讯协议向前兼容, v2.4.*可无缝升级。
### 7.36 版本 v2.5.0 Release Notes[规划中]
- 1、【优化】框架基础守护线程异常处理逻辑优化, 避免极端情况下因Error导致调度终止问题;
- 2、【优化】部分系统日志优化, 提升可读性;
- 3、【重构】调度线程任务信息更新逻辑优化, 避免极端情况下已关闭任务被启动问题;
- 5、【重构】执行器注册逻辑重构, 降低多调度中心地址时并发注册问题; 注册表“xxl_job_registry”新增唯一索引, 避免冗余注册信息存储;
- 4、[规划中]升级springboot3.x, 解决2.x老版本漏洞类问题。注意, springboot3.x依赖jdk17;
- 5、[规划中]安全功能增强, 通讯加密参数改用加密数据避免AccessToken明文, 降低token泄漏风险;
- 6、[规划中]登陆态Token声称逻辑优化, 混淆登陆时间属性, 降低token泄漏风险;
### TODO LIST
- 1、调度隔离: 调度中心针对不同执行器, 各自维护不同的调度和远程触发组件。