07、XXL-JOB 版本更新日志

7.1 版本 V1.1.x,新特性[2015-12-05]

【于V1.1.x版本,XXL-JOB正式应用于我司,内部定制别名为 “Ferrari”,新接入应用推荐使用最新版本】

  • 1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
  • 2、动态:支持动态修改任务状态,动态暂停/恢复任务,即时生效;
  • 3、服务HA:任务信息持久化到mysql中,Job服务天然支持集群,保证服务HA;
  • 4、任务HA:某台Job服务挂掉,任务会平滑分配给其他的某一台存活服务,即使所有服务挂掉,重启时或补偿执行丢失任务;
  • 5、一个任务只会在其中一台服务器上执行;
  • 6、任务串行执行;
  • 7、支持自定义参数;
  • 8、支持远程任务执行终止;

7.2 版本 V1.2.x,新特性[2016-01-17]

  • 1、支持任务分组;
  • 2、支持“本地任务”、“远程任务”;
  • 3、底层通讯支持两种方式,Servlet方式 + JETTY方式;
  • 4、支持“任务日志”;
  • 5、支持“串行执行”,并行执行;

说明: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代码和执行;

7.4 版本 V1.3.1,新特性[2016-05-23]

  • 1、更新项目目录结构:

  • /xxl-job-admin —————————— 【调度中心】:负责管理调度信息,按照调度配置发出调度请求;

  • /xxl-job-core ———————————- 公共依赖

  • /xxl-job-executor-example ——— 【执行器】:负责接收调度请求并执行任务逻辑;

  • /db ————————————————— 建表脚本

  • /doc ————————————————- 用户手册

  • 2、在新的目录结构上,升级了用户手册;

  • 3、优化了一些交互和UI;

7.5 版本 V1.3.2,新特性[2016-05-28]

  • 1、调度逻辑进行事务包裹;
  • 2、执行器异步回调执行日志;
  • 3、【重要】在 “调度中心” 支持HA的基础上,扩展执行器的Failover支持,支持配置多执行期地址;

7.6 版本 V1.4.0 新特性[2016-07-24]

  • 1、任务依赖: 通过事件触发方式实现, 任务执行成功并回调时会主动触发一次子任务的调度, 多个子任务用逗号分隔;

  • 2、执行器底层实现代码进行重度重构, 优化底层建表脚本;

  • 3、执行器中任务线程分组逻辑优化: 之前根据执行器JobHandler进行线程分组,当多个任务复用Jobhanlder会导致相互阻塞。现改为根据调度中心任务进行任务线程分组,任务与任务执行相互隔离;

  • 4、执行器调度通讯方案优化, 通过Hex + HC实现建议RPC通讯协议, 优化了通讯参数的维护和解析流程;

  • 5、调度中心, 新建/编辑任务, 界面属性调整:

  • 5.1、任务新增/编辑界面中去除 “任务名JobName”属性 ,该属性改为系统自动生成: 该字段之前主要用于在 “调度中心” 唯一标示一个任务, 现实意义不大, 因此计划淡化掉该字段,改为系统生成UUID,从而简化任务新建的操作;

  • 5.2、任务新增/编辑界面中去除 “GLUE模式” 复选框位置调整, 改为贴近”JobHandler”输入框右侧;

  • 5.3、任务新增/编辑界面中去除 “报警阈值” 属性;

  • 5.4、任务新增/编辑界面中去除 “子任务Key” 属性, 每个任务全局任务Key可以从任务列表获取, 当本任务执行结束且成功后, 将会根据子任务Key匹配子任务并主动触发一次子任务执行;

  • 6、问题修复:

  • 6.1、执行器jetty关闭优化,解决一处可能导致jetty无法关闭的问题;

  • 6.2、执行器任务终止时,执行队列回调优化,解决一处导致任务无法回调的问题;

  • 6.3、调度中心中列表分页参数优化,解决一处因服务器限制post长度而引起的问题;

  • 6.4、执行器Jobhandler注解优化,解决一处因事务代理导致的容器无法加载JobHandler的问题;

  • 6.5、远程调度优化,禁用retry策略,解决一处可能导致重复调用的问题;

Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段, 地址见分支 V1.3 。新特性将会在master分支持续更新。

7.7 版本 V1.4.1 新特性[2016-09-06]

  • 1、项目成功推送maven中央仓库, 中央仓库地址以及依赖如下:



<!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ --> 

<dependency> 

   <groupId>com.xuxueli</groupId> 
   
   <artifactId>xxl-job-core</artifactId> 
   
   <version>${最新稳定版}</version> 

</dependency> 


  • 2、为适配中央仓库规则, 项目groupId从com.xxl改为com.xuxueli。
  • 3、系统版本不在维护在项目跟pom中,各个子模块单独配置版本配置,解决子模块无法单独编译的问题;
  • 4、底层RPC通讯,传输数据的字节长度统计规则优化,可节省50%数据传输量;
  • 5、IJobHandler取消任务返回值,原通过返回值判断执行状态,逻辑改为:默认任务执行成功,仅在捕获异常时认定任务执行失败。
  • 6、系统公共弹框功能,插件化;
  • 7、底层表结构,表明统一大写;
  • 8、调度中心,异常处理器JSON响应的ContentType修改,修复浏览器不识别的问题;

7.8 版本 V1.4.2 新特性[2016-09-29]

  • 1、推送新版本 V1.4.2 至中央仓库, 大版本 V1.4 进入维护阶段;
  • 2、任务新增时,任务列表偏移问题修复;
  • 3、修复一处因bootstrap不支持模态框重叠而导致的样式错乱的问题, 在任务编辑时会出现该问题;
  • 4、调度超时和Handler匹配不到时,调度状态优化;
  • 5、因catch异常,导致任务不可终止的问题,给出解决方案, 见文档;

7.9 版本 V1.5.0 特性[2016-11-13]

  • 1、任务注册: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。
  • 2、”执行器” 新增参数 “AppName” : 是每个执行器集群的唯一标示AppName, 并周期性以AppName为对象进行自动注册。
  • 3、调度中心新增栏目 “执行器管理” : 管理在线的执行器, 通过属性AppName自动发现注册的执行器。只有被管理的执行器才允许被使用;
  • 4、”任务组”属性改为”执行器”: 每个任务需要绑定指定的执行器, 调度地址通过绑定的执行器获取;
  • 5、抛弃”任务机器”属性: 通过任务绑定的执行器, 自动发现注册的远程执行器地址并触发调度请求。
  • 6、”公共依赖”中新增DBGlueLoader,基于原生jdbc实现GLUE源码的加载器,减少第三方依赖(mybatis,spring-orm等);精简和优化执行器测配置(针对GLUE任务),降低上手难度;
  • 7、表结构调整,底层重构优化;
  • 8、”调度中心”自动注册和发现,failover: 调度中心周期性自动注册, 任务回调时可以感知在线的所有调度中心地址, 通过failover的方式进行任务回调,避免回调单点风险。

7.10 版本 V1.5.1 特性[2016-11-13]

  • 1、底层代码重构和逻辑优化,POM清理以及CleanCode;
  • 2、Servlet/JSP Spec设定为3.0/2.2
  • 3、Spring升级至3.2.17.RELEASE版本;
  • 4、Jetty升级版本至8.2.0.v20160908;
  • 5、已推送V1.5.0和V1.5.1至Maven中央仓库;

7.11 版本 V1.5.2 特性[2017-02-28]

  • 1、IP工具类获取IP逻辑优化,IP静态缓存;
  • 2、执行器、调度中心,均支持自定义注册IP地址;解决机器多网卡时错误网卡注册的情况;
  • 3、任务跨天执行时生成多份日志文件的问题修复;
  • 4、底层日志底层日志调整,非敏感日志level调整为debug;
  • 5、升级数据库连接池c3p0版本;
  • 6、执行器log4j配置优化,去除无效属性;
  • 7、底层代码重构和逻辑优化以及CleanCode;
  • 8、GLUE依赖注入逻辑优化,支持别名注入;

7.12 版本 V1.6.0 特性[2017-03-13]

  • 1、通讯方案升级,原基于HEX的通讯模型调整为基于HTTP的B-RPC的通讯模型;
  • 2、执行器支持手动设置执行地址列表,提供开关切换使用注册地址还是手动设置的地址;
  • 3、执行器路由规则:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移;
  • 4、规范线程模型统一,统一线程销毁方案(通过listener或stop方法,容器销毁时销毁线程;Daemon方式有时不太理想);
  • 5、规范系统配置数据,通过配置文件统一管理;
  • 6、CleanCode,清理无效的历史参数;
  • 7、底层扩展数据结构以及相关表结构调整;
  • 8、新建任务默认为非运行状态;
  • 9、GLUE模式任务实例更新逻辑优化,原根据超时时间更新改为根据版本号更新,源码变动版本号加一;

7.13 版本 V1.6.1 特性[2017-03-25]

  • 1、Rolling日志;
  • 2、WebIDE交互重构;
  • 3、通讯增强校验,有效过滤非正常请求;
  • 4、权限增强校验,采用动态登录TOKEN(推荐接入内部SSO);
  • 5、数据库配置优化,解决乱码问题;

7.14 版本 V1.6.2 特性[2017-04-25]

  • 1、运行报表:支持实时查看运行数据,如任务数量、调度次数、执行器数量等;以及调度报表,如调度日期分布图,调度成功分布图等;
  • 2、JobHandler支持设置任务返回值,在任务逻辑中可以方便的控制任务执行结果;
  • 3、资源路径包含空格或中文时资源文件无法加载时,无法准确查看异常信息的问题处理。
  • 4、路由策越优化:循环和LFU路由策略计数器自增无上限问题和首次路由压力集中在首台机器的问题修复;

7.15 版本 V1.7.0 特性[2017-05-02]

  • 1、脚本任务:支持以GLUE模式开发和运行脚本任务,包括Shell、Python和Groovy等类型脚本;
  • 2、新增spring-boot类型执行器example项目;
  • 3、升级jetty版本至9.2;
  • 4、任务运行日志移除log4j组件依赖,改为底层自主实现,从而取消了对日志组件的依赖限制;
  • 5、执行器移除GlueLoader依赖,改为推送方式实现,从而GLUE源码加载不再依赖JDBC;
  • 6、登录拦截Redirect时获取项目名,解决非根据目录发布时跳转404问题;

7.16 版本 V1.7.1 特性[2017-05-08]

  • 1、运行日志读写编码统一为UTF-8,解决windows环境下日志乱码问题;
  • 2、通讯超时时间限定为10s,避免异常情况下调度线程占用;
  • 3、执行器,server启动、销毁和注册逻辑调整;
  • 4、JettyServer关闭逻辑优化,修复执行器无法正常关闭导致端口占用和频繁打印c3p0日志的问题;
  • 5、JobHandler中开启子线程时,支持子线程输出执行日志并通过Rolling查看。
  • 6、任务日志清理功能;
  • 7、弹框组件统一替换为layer;
  • 8、升级quartz版本至2.3.0;

7.17 版本 V1.7.2 特性[2017-05-17]

  • 1、阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度;
  • 2、失败处理策略;调度失败时的处理策略,策略包括:失败告警(默认)、失败重试;
  • 3、通讯时间戳超时时间调整为180s;
  • 4、执行器与数据库彻底解耦,但是执行器需要配置调度中心集群地址。调度中心提供API供执行器回调和心跳注册服务,取消调度中心内部jetty,心跳周期调整为30s,心跳失效为三倍心跳;
  • 5、执行参数编辑时丢失问题修复;
  • 6、新增任务测试Demo,方便在开发时进行任务逻辑测试;

7.18 版本 V1.8.0 特性[2017-07-17]

  • 1、任务Cron更新逻辑优化,改为rescheduleJob,同时防止cron重复设置;
  • 2、API回调服务失败状态码优化,方便问题排查;
  • 3、XxlJobLogger的日志多参数支持;
  • 4、路由策略新增 “忙碌转移” 模式:按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;
  • 5、路由策略代码重构;
  • 6、执行器重复注册问题修复;
  • 7、任务线程轮空30次后自动销毁,降低低频任务的无效线程消耗。
  • 8、执行器任务执行结果批量回调,降低回调频率提升执行器性能;
  • 9、springboot版本执行器,取消XML配置,改为类配置方式;
  • 10、执行日志,支持根据运行 “状态” 筛选日志;
  • 11、调度中心任务注册检测逻辑优化;

7.19 版本 V1.8.1 特性[2017-07-30]

  • 1、分片广播任务:执行器集群部署时,任务路由策略选择”分片广播”情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数处理分片任务;
  • 2、动态分片:分片广播任务以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。
  • 3、执行器JobHandler禁止命名冲突;
  • 4、执行器集群地址列表进行自然排序;
  • 5、调度中心,DAO层代码精简优化并且新增测试用例覆盖;
  • 6、调度中心API服务改为自研RPC形式,统一底层通讯模型;
  • 7、新增调度中心API服务测试Demo,方便在调度中心API扩展和测试;
  • 8、任务列表页交互优化,更换执行器分组时自动刷新任务列表,新建任务时默认定位在当前执行器位置;
  • 9、访问令牌(accessToken):为提升系统安全性,调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯;
  • 10、springboot版本执行器,升级至1.5.6.RELEASE版本;
  • 11、统一maven依赖版本管理;

7.20 版本 V1.8.2 特性[2017-09-04]

  • 1、项目主页搭建:提供中英文文档:https://www.xuxueli.com/xxl-job
  • 2、JFinal执行器Sample示例项目;
  • 3、事件触发:除了”Cron方式”和”任务依赖方式”触发任务执行之外,支持基于事件的触发任务方式。调度中心提供触发任务单次执行的API服务,可根据业务事件灵活触发。
  • 4、执行器摘除:执行器销毁时,主动通知调度中心并摘除对应执行器节点,提高执行器状态感知的时效性。
  • 5、执行器手动设置IP时将会绑定Host;
  • 6、规范项目目录,方便扩展多执行器;
  • 7、解决执行器回调URL不支持配置HTTPS时问题;
  • 8、执行器回调线程销毁前, 批量回调队列中数据,防止任务结果丢失;
  • 9、调度中心任务监控线程销毁时,批量对失败任务告警,防止告警信息丢失;
  • 10、任务日志文件路径时间戳格式化时SimpleDateFormat并发问题解决;

7.21 版本 V1.9.0 特性[2017-12-29]

  • 1、新增Nutz执行器Sample示例项目;
  • 2、新增任务运行模式 “GLUE模式(NodeJS) “,支持NodeJS脚本任务;
  • 3、脚本任务Shell、Python和Nodejs等支持获取分片参数;
  • 4、失败重试,完整支持:调度中心调度失败且启用”失败重试”策略时,将会自动重试一次;执行器执行失败且回调失败重试状态(新增失败重试状态返回值)时,也将会自动重试一次;
  • 5、失败告警策略扩展:默认提供邮件失败告警,可扩展短信等,扩展代码位置为 “JobFailMonitorHelper.failAlarm”;
  • 6、执行器端口支持自动生成(小于等于0时),避免端口定义冲突;
  • 7、调度报表优化,支持时间区间筛选;
  • 8、Log组件支持输出异常栈信息,底层实现优化;
  • 9、告警邮件样式优化,调整为表格形式,邮件组件调整为commons-email简化邮件操作;
  • 10、项目依赖全量升级至较新稳定版本,如spring、jackson等等;
  • 11、任务日志,记录发起调度的机器信息;
  • 12、交互优化,如登录注销;
  • 13、任务Cron长度扩展支持至128位,支持负责类型Cron设置;
  • 14、执行器地址录入交互优化,地址长度扩展支持至512位,支持大规模执行器集群配置;
  • 15、任务参数“IJobHandler.execute”入参改为“String params”,增强入参通用性。
  • 16、IJobHandler提供init/destroy方法,支持在相应任务线程初始化和销毁时进行附加操作;
  • 17、任务注解调整为 “@JobHandler”,与任务抽象接口统一;
  • 18、修复任务监控线程被耗时任务阻塞的问题;
  • 19、修复任务监控线程无法监控任务触发和执行状态均未0的问题;
  • 20、执行器动态代理对象,拦截非业务方法的执行;
  • 21、修复JobThread捕获Error错误不更新JobLog的问题;
  • 22、修复任务列表界面左侧菜单合并时样式错乱问题;
  • 23、调度中心项目日志配置改为xml文件格式;
  • 24、Log地址格式兼容,支持非”/“结尾路径配置;
  • 25、底层系统日志级别规范调整,清理遗留代码;
  • 26、建表SQL优化,支持同步创建制定编码的库和表;
  • 27、系统安全性优化,登录Token写Cookie时进行MD5加密,同时Cookie启用HttpOnly;
  • 28、新增”任务ID”属性,移除”JobKey”属性,前者承担所有功能,方便后续增强任务依赖功能。
  • 29、任务循环依赖问题修复,避免子任务与父任务重复导致的调度死循环;
  • 30、任务列表新增筛选条件 “任务描述”,快速检索任务;
  • 31、执行器Log文件定期清理功能:执行器新增配置项(”xxl.job.executor.logretentiondays”)日志保存天数,日志文件过期自动删除。

7.22 版本 V1.9.1 特性[2018-02-22]

  • 1、国际化:调度中心实现国际化,支持中文、英文两种语言,默认为中文。
  • 2、调度报表新增”运行中”中状态项;
  • 3、调度报表优化,报表SQL调优并且新增LocalCache缓存(缓存时间60s),提高大数据量下报表加载速度;
  • 4、修复打包部署时资源文件乱码问题;
  • 5、修复新版本chrome滚动到顶部失效问题;
  • 6、调度中心配置加载优化,取消对配置文件名的强依赖,支持加载磁盘配置;
  • 7、修复脚本任务Log文件未正常close的问题;
  • 8、项目依赖全量升级至较新稳定版本,如spring、jackson等等;

7.23 版本 V1.9.2 特性[2018-10-05]

  • 1、任务超时控制:新增任务属性 “任务超时时间”,并支持自定义,任务运行超时将会主动中断任务;
  • 2、任务失败重试次数:新增任务属性 “失败重试次数”,并支持自定义,当任务失败时将会按照预设的失败重试次数主动进行重试;同时收敛废弃其他失败重试策略,如调度失败、执行失败、状态码失败等;
  • 3、新增任务运行模式 “GLUE模式(PHP) “,支持php脚本任务;
  • 4、新增任务运行模式 “GLUE模式(PowerShell) “,支持PowerShell脚本任务;
  • 5、调度全异步处理:任务触发之后,推送到调度队列,多线程并发处理调度请求,提高任务调度速率的同时,避免因网络问题导致quartz调度线程阻塞的问题;
  • 6、执行器任务结果落盘优化:执行器回调失败时将任务结果写磁盘,待重启或网络恢复时重试回调任务结果,防止任务执行结果丢失;
  • 7、任务日志查询速度大幅提升:百万级别数据量搜索速度提升1000倍;
  • 8、调度中心提供API服务,支持通过API服务对任务进行查询、新增、更新、启停等操作;
  • 9、底层自研Log组件参数占位符改为”{}”,并修复打印有参日志时参数不匹配导致报错的问题;
  • 10、任务回调结果优化,支持展示在Rolling log中,方便问题排查;
  • 11、底层LocalCache组件兼容性优化,支持jdk9、jdk10及以上版本编译部署;
  • 12、告警邮件固定使用 UTF-8 编码格式,修复由机器编码导致的邮件乱码问题;
  • 13、告警邮件中展示失败告警信息;
  • 14、告警邮箱支持SSL配置;
  • 15、Window机器下File.separator不兼容问题修复;
  • 16、脚本任务异常Log输出优化;
  • 17、任务线程停止变量修饰符优化;
  • 18、脚本任务Log文件流关闭优化;
  • 19、任务报表成功、失败和进行中统计问题修复;
  • 20、核心依赖Core内部国际化处理;
  • 21、默认Quartz线程数调整为50;
  • 22、新增左侧菜单”运行报表”;
  • 23、执行器手动设置IP时取消绑定Host的操作,该IP仅供执行器注册使用;修复指定外网IP时无法绑定执行器Host的问题;
  • 24、取消父子任务不可重复的限制,支持循环任务触发等特殊场景;
  • 25、任务调度备注中标注任务触发类型,如Cron触发、父任务触发、API触发等等,方便排查调度日志;
  • 26、底层日志组件SimpleDateFormat线程安全问题修复;
  • 27、执行器通讯线程优化,corePoolSize从256降低至32;
  • 28、任务日志表状态字段类型优化;
  • 29、GLUE脚本文件自动清理功能,及时清理过期脚本文件;
  • 30、执行器注册方式切换优化,切换自动注册时主动同步在线机器,避免执行器为空的问题;
  • 31、跨平台:除了提供Java、Python、PHP等十来种任务模式之外,新增提供基于HTTP的任务模式;
  • 32、底层RPC序列化协议调整为hessian2;
  • 33、修复表字段 “t.order”与数据库关键字冲突查询失败的问题,
  • 34、任务属性枚举 “任务模式、阻塞策略” 国际化优化;
  • 35、分片任务失败重试优化,仅重试当前失败的分片;
  • 36、任务触发时支持动态传参,调度中心与API服务均提供提供动态参数功能;
  • 37、任务执行日志、调度日志字段类型调整,改为text类型并取消字数限制;
  • 38、GLUE任务脚本字段类型调整,改为mediumtext类型,提高GLUE长度上限;
  • 39、任务监控线程Log输出优化,运行中任务的监控Log改为debug级别,减少非核心日志量;
  • 40、项目依赖全量升级至较新稳定版本,如spring、Jackson、groovy等等;
  • 41、docker支持:调度中心提供 Dockerfile 方便快速构建docker镜像;

7.24 版本 V2.0.0 Release Notes[2018-11-04]

  • 1、调度中心迁移到 springboot;
  • 2、底层通讯组件迁移至 xxl-rpc;
  • 3、容器化:提供官方docker镜像,并实时更新推送dockerhub(docker pull xuxueli/xxl-job-admin),进一步实现产品开箱即用;
  • 4、新增无框架执行器Sample示例项目 “xxl-job-executor-sample-frameless”。不依赖第三方框架,只需main方法即可启动运行执行器;
  • 5、命令行任务:原生提供通用命令行任务Handler(Bean任务,”CommandJobHandler”);业务方只需要提供命令行即可;
  • 6、任务状态优化,仅运行状态”NORMAL”任务关联至quartz,降低quartz底层数据存储与调度压力;
  • 7、任务状态规范:新增任务默认停止状态,任务更新时保持任务状态不变;
  • 8、IP获取逻辑优化,优先遍历网卡来获取可用IP;
  • 9、任务新增的API服务接口返回任务ID,方便调用方实用;
  • 10、组件化优化,移除对 spring 的依赖:非spring应用选用 “XxlJobExecutor” 、spring应用选用 “XxlJobSpringExecutor” 作为执行器组件;
  • 11、任务RollingLog展示逻辑优化,修复超时任务无法查看的问题;
  • 12、多项UI组件升级到最新版本,如:CodeMirror、Echarts、Jquery 等;
  • 13、项目依赖升级 groovy 至较新稳定版本;pom清理;
  • 14、子任务失败重试重试逻辑优化,子任务失败时将会按照其预设的失败重试次数主动进行重试

7.25 版本 v2.0.1 Release Notes[2018-11-09]

  • 1、左侧菜单折叠动画问题修复;
  • 2、调度报表日期分布图默认值统一;
  • 3、freemarker对数字默认加千分位问题修复,解决日志ID被分隔导致查看日志失败问题;
  • 4、底层通讯组件升级,修复通讯异常时无效等待的问题;
  • 5、执行器启动之后jetty停止的问题修复;

7.26 版本 v2.0.2 Release Notes[2019-04-20]

  • 1、底层通讯方案优化:升级较新版本xxl-rpc,由”JETTY”方案调整为”NETTY_HTTP”方案,执行器内嵌netty-http-server提供服务,调度中心复用容器端口提供服务;
  • 2、任务告警逻辑调整,改为通过扫描失败日志方式触发。一方面精确扫描失败任务,降低扫描范围;另一方面取消内存队列,降低线程内存消耗;
  • 3、Quartz触发线程池废弃并替换为 “XxlJobThreadPool”,降低线程切换、内存占用带来的消耗,提高调度性能;
  • 4、调度线程池隔离,拆分为”Fast”和”Slow”两个线程池,1分钟窗口期内任务耗时达500ms超过10次,该窗口期内判定为慢任务,慢任务自动降级进入”Slow”线程池,避免耗尽调度线程,提高系统稳定性;
  • 5、执行器热部署时JobHandler重新初始化,修复由此导致的 “jobhandler naming conflicts.” 问题;
  • 6、新增Class的加载缓存,解决频繁加载Class会使jvm的方法区空间不足导致OOM的问题;
  • 7、任务支持更换绑定执行器,方便任务分组转移和管理;
  • 8、调度中心告警邮件发送组件改为 “spring-boot-starter-mail”;
  • 9、记住密码功能优化,选中时永久记住;非选中时关闭浏览器即登出;
  • 10、项目依赖升级至较新稳定版本,如quartz、spring、jackson、groovy、xxl-rpc等等;
  • 11、精简项目,取消第三方依赖,如 commons-collections4、commons-lang3 ;
  • 12、执行器回调日志落盘方案复用RPC序列化方案,并移除Jackson依赖;
  • 13、底层Log调优,应用正常终止取消异常栈信息打印;
  • 14、交互优化,尽量避免新开页面窗口;仅WebIDE支持新开页,并提供窗口快速关闭按钮;任务启、停、删除、触发等轻操作提示改为toast方式,
  • 15、任务暂停、删除优化,避免quartz delete不完整导致任务脏数据;
  • 16、任务回调、心跳注册成功日志优化,非核心常规日志调整为debug级别,降低冗余日志输出;
  • 17、调整首页报表默认区间为本周,避免日志量太大查询缓慢;
  • 18、LRU路由更新不及时问题修复;
  • 19、任务失败告警邮件发送逻辑优化;
  • 20、调度日志排序逻辑调整为按照调度时间倒序,兼容TIDB等主键不连续日志存储组件;
  • 21、执行器优雅停机优化;
  • 22、连接池配置优化,增强连接有效性验证;
  • 23、JobHandler#msg长度限制,修复异常情况下日志超长导致内存溢出的问题;
  • 24、升级xxl-rpc至较新版本,修复springboot 2.x版本兼容性问题;

7.27 版本 v2.1.0 Release Notes[2019-07-07]

  • 1、自研调度组件,移除quartz依赖:一方面是为了精简系统降低冗余依赖,另一方面是为了提供系统的可控度与稳定性;

  • 触发:单节点周期性触发,运行事件如delayqueue;

  • 调度:集群竞争,负载方式协同处理,锁竞争-更新触发信息-推送时间轮-锁释放-锁竞争;

  • 2、底层表结构重构:移除11张quartz相关表,并对现有表结构优化梳理;

  • 3、任务日志主键调整为long数据类型,防止海量日志情况下数据溢出;

  • 4、底层线程模型重构:移除Quartz线程池,降低系统线程与内存开销;

  • 5、用户管理:支持在线管理系统用户,存在管理员、普通用户两种角色;

  • 6、权限管理:执行器维度进行权限控制,管理员拥有全量权限,普通用户需要分配执行器权限后才允许相关操作;

  • 7、调度线程池参数调优;

  • 8、注册表索引优化,缓解锁表问题;

  • 9、新增Jboot执行器Sample示例项目;

  • 10、任务列表优化,支持根据 “任务状态”、”负责人” 属性筛选任务;

  • 11、任务日志列表交互优化,操作按钮合并为分割按钮;

  • 12、项目依赖升级至较新稳定版本,如spring、springboot、groovy、xxl-rpc等等;并清理冗余POM;

  • 13、升级xxl-rpc至较新版本,修复代理服务初始化时远程服务不可用导致长连冗余创建的问题;

  • 14、首页调度报表的日期排序在TIDB下乱序问题修复;

  • 15、调度中心与执行器双向通讯超时时间调整为3s;

  • 16、调度组件销毁流程优化,先停止调度线程,然后等待时间轮内存量任务处理完成,最终销毁时间轮线程;

  • 17、执行器回调线程优化,回调地址为空时销毁问题修复;

  • 18、HttpJobHandler优化,响应数据指定UTF-8格式,避免中文乱码;

  • 19、代码优化,ConcurrentHashMap变量类型改为ConcurrentMap,避免因不同版本实现不同导致的兼容性问题;

7.28 版本 v2.1.1 Release Notes[2019-11-24]

  • 1、 调度中心日志自动清理功能(至此,调度中心/执行器均支持日志自动清理,过期天数均默认设置为30天):调度中心新增配置项(”xxl.job.logretentiondays”)日志保存天数,过期日志自动清理;解决海量日志情况下日志表慢SQL问题;限制大于等于7时生效,否则关闭清理功能,默认为30;
  • 2、 调度报表优化:新增日志报表的存储表,三天内的任务日志会以每分钟一次的频率异步同步至报表中;任务报表仅读取报表数据,极大提升加载速度;
  • 3、 Cron在线生成工具:任务新增、编辑框通过组件在线生成Cron表达式;
  • 4、 Cron下次执行时间查询:支持通过界面在线查看后续连续5次执行时间;
  • 5、 调度中心新增应用健康检查功能,借助“spring-boot-starter-actuator”,相对地址 “/actuator/health”;
  • 6、 DB脚本默认编码改为utf8mb4,修复字符乱码问题(建议Mysql版本5.7+);
  • 7、 调度中心任务平均分配,触发组件每次获取与线程池数量相关数量的任务,避免大量任务集中在单个调度中心集群节点;
  • 8、 任务触发组件优化,预加载频率正常1s一次,当预加载轮空时主动休眠一个加载周期,动态降低加载频率从而降低DB压力;
  • 9、 调度组件优化:针对永远不会触发的Cron禁止配置和启动;任务Cron最后一次触发后再也不会触发时,比如一次性任务,主动停止相关任务;
  • 10、DB重连优化,修复DB宕机重连后任务调度停止的问题,重连后自动加入调度集群触发任务调度;
  • 11、注册监控线程优化,降低死锁几率;
  • 12、调度中心日志删除优化,改为分页获取ID并根据ID删除的方式,避免批量删除海量日志导致死锁问题;
  • 13、任务重试时参数丢失的问题修复;
  • 14、调度中心移除SQL中的 “now()” 函数;集群部署时不再依赖DB时钟,仅需要保证调度中心应用节点时钟一致即可;
  • 15、任务触发组件加载顺序调整,避免小概率情况下组件随机加载顺序导致的I18N的NPE问题;
  • 16、JobThread自销毁优化,避免并发触发导致triggerQueue中任务丢失问题;
  • 17、调度中心密码限制18位,修复修改密码超过18位无法登录的问题;
  • 18、任务告警组件分页参数无效问题修复;
  • 19、升级xxl-rpc版本:服务端线程优化,降低线程内存开销;IpUtil优化:增加连通性校,过滤明确非法的网卡;
  • 20、调度中心回调API服务改为restful方式;
  • 21、UI优化,任务列表和日志列表数据表格宽度比例调整,避免数据换行提升体验;
  • 22、登录界面取消默认填写的登录账号密码;
  • 23、执行器表属性调整,”顺序” 属性调整为整型,解决执行器数据较多时无法正确排序的问题;
  • 24、任务列表交互优化,支持查看任务所属执行器的注册节点;
  • 25、项目依赖升级至较新稳定版本,如spring、spring-boot、mybatis、slf4j、groovy等等;
  • 26、日志组件优化:调度中心支持控制每次请求最大加载行数,日志量太大时分批请求,避免单次加载日志量太大阻塞页面;

7.29 版本 v2.1.2 Release Notes[2019-12-12]

  • 1、方法任务支持:由原来基于JobHandler类任务开发方式,优化为支持基于方法的任务开发方式;因此,可以支持单个类中开发多个任务方法,进行类复用
      
      
       
       @XxlJob("demoJobHandler") 
       
       public ReturnT<String> execute(String param) { 
       
         XxlJobLogger.log("hello world"); 
       
         return ReturnT.SUCCESS; 
       
       } 
      
      
  • 2、移除commons-exec,采用原生方式实现,降低第三方依赖;
  • 3、执行器回调乱码问题修复;
  • 4、调度中心dispatcher servlet加载顺序优化;
  • 5、执行器回调地址https兼容支持;
  • 6、多个项目依赖升级至较新稳定版本;
  • 注意:最新版本 “XxlJobSpringExecutor” 逻辑有调整,历史项目中该组件的配置方式请参考Sample示例项目进行调整,尤其注意需要移除组件的init和destroy方法;

7.30 版本 v2.2.0 Release Notes[2020-04-14]

  • 1、RESTful API:调度中心与执行器提供语言无关的 RESTful API 服务,第三方任意语言可据此对接调度中心或者实现执行器。
  • 2、任务复制功能:点击复制是弹出新建任务弹框,并初始化被复制任务信息;
  • 3、任务手动执行一次的时候,支持指定本次执行的机器地址,为空则从执行器获取;
  • 4、任务结果丢失处理:调度记录停留在 “运行中” 状态超过10min,且对应执行器心跳注册失败不在线,则将本地调度主动标记失败;
  • 5、调度中心升级springboot2.x;因此,系统要求JDK8+;
  • 6、XxlJob注解扫描方式优化,支持查找父类以及接口和基于类代理等常见情况;修复任务为空时小概率NPE问题;
  • 7、移除旧类注解JobHandler,推荐使用基于方法注解 “@XxlJob” 的方式进行任务开发;(如需保留类注解JobHandler使用方式,可以参考旧版逻辑定制开发);
  • 8、任务告警组件模块化:如果需要新增一种告警方式,只需要新增一个实现 “com.xxl.job.admin.core.alarm.JobAlarm” 接口的告警实现即可,更加灵活、方便定制;
  • 9、调度中心国际化完善:新增 “中文繁体” 支持。默认为 “zh_CN”/中文简体, 可选范围为 “zh_CN”/中文简体, “zh_TC”/中文繁体 and “en”/英文;
  • 10、执行器注册逻辑优化:新增配置项 ”注册地址 / xxl.job.executor.address“,优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
  • 11、默认数据库连接池调整为hikari,移除tomcat-jdbc依赖;
  • 12、多个项目依赖升级至较新稳定版本,如mybatis、groovy和mysql驱动等;
  • 13、执行器优雅停机优化,修复任务线程中断未join导致回调丢失的问题;
  • 14、一致性哈希路由策略优化:默认虚拟节点数量调整为100,提高路由的均衡性;
  • 15、通用HTTP任务Handler(httpJobHandler)优化,扩展自定义参数信息,示例参数如下;
      
      
       
       url: http://www.xxx.com 
       
       method: get 或 post 
       
       data: post-data 
      
      
  • 16、SQL脚本编码默认utf8mb4执行,避免小概率下容器环境中乱码问题;
  • 17、Web IDE交互问题修复:输入源码备注之后按回车跳转error问题处理;
  • 18、执行器初始化逻辑优化:修复懒加载的Bean被提前初始化问题;
  • 19、执行器注册默认值优化;
  • 20、修复bootstrap.min.css.map 404问题;
  • 21、执行器UI交互优化,移除冗余order属性;
  • 22、执行备注消息长度限制,修复数据超长无法存储导致导致回调失败的问题;
    注意:XxlJobSpringExecutor组件个别字段调整:“appName” 调整为 “appname” ,升级时该组件时需要注意;

7.31 版本 v2.3.0 Release Notes[2021-02-09]

  • 1、【新增】调度过期策略:调度中心错过调度时间的补偿处理策略,包括:忽略、立即补偿触发一次等;

  • 2、【新增】触发策略:除了常规Cron、API、父子任务触发方式外,新增提供 “固定间隔触发、(固定延时触发,实验中)” 新触发方式;

  • 3、【新增】新增任务辅助工具 “XxlJobHelper”:提供统一任务辅助能力,包括:任务上下文信息维护获取(任务参数、任务ID、分片参数)、日志输出、任务结果设置……等;

  • 3.1、”ShardingUtil” 组件废弃:改用 “XxlJobHelper.getShardIndex()/getShardTotal();” 获取分片参数;

  • 3.2、”XxlJobLogger” 组件废弃:改用 “XxlJobHelper.log” 进行日志输出;

  • 4、【优化】任务核心类 “IJobHandler” 的 “execute” 方法取消出入参设计。改为通过 “XxlJobHelper.getJobParam” 获取任务参数并替代方法入参,通过 “XxlJobHelper.handleSuccess/handleFail” 设置任务结果并替代方法出参,示例代码如下;

      
      
       
       @XxlJob("demoJobHandler") 
       
       public void execute() { 
       
       String param = XxlJobHelper.getJobParam();    // 获取参数 
       
       XxlJobHelper.handleSuccess();                 // 设置任务结果 
       
       } 
      
      
  • 5、【优化】Cron编辑器增强:Cron编辑器修改cron时可实时查看最近运行时间;
  • 6、【优化】执行器示例项目规范整理;
  • 7、【优化】任务调度生命周期重构:调度(schedule)、触发(trigger)、执行(handle)、回调(callback)、结束(complete);
  • 8、【优化】执行器注册组件优化:注册逻辑调整为异步方式,提高注册性能;
  • 9、【优化】执行器鉴权校验:执行器启动时主动校验accessToken,为空则主动Warn告警;(已规划安全强化:AccessToken动态生成、动态启停等)
  • 10、【优化】邮箱告警配置优化:将”spring.mail.from”与”spring.mail.username”属性拆分开,更加灵活的支持一些无密码邮箱服务;
  • 11、【优化】多个项目依赖升级至较新稳定版本,如netty、groovy、spring、springboot、mybatis等;
  • 12、【优化】UI组件常规升级,提升组件稳定性;
  • 13、【优化】调度中心页面交互优化:用户管理模块密码列取消;多处表达autocomplete取消;执行器管理模块XSS拦截校验等;
  • 14、【优化】调度中心任务状态探测慢SQL问题优化;
  • 15、【修复】GLUE-Java模式任务,init/destroy无法执行问题修复;
  • 16、【修复】Cron编辑器问题修复:修复小概率情况下cron单个字段修改时导致其他字段被重置问题;
  • 17、【修复】通用HTTP任务Handler(httpJobHandler)优化:修复 “setDoOutput(true)” 导致任务请求GetMethod失效问题;
  • 18、【修复】执行器Commandhandler示例任务优化,修复极端情况下脚本进程挂起问题;
  • 19、【修复】调度通讯组件优化,修复RestFul方式调用 DotNet 版本执行器时心跳检测失败问题;
  • 20、【修复】调度中心远程执行日志查询乱码问题修复;
  • 21、【修复】调度中心组件加载顺序优化,修复极端情况下调度组件初始慢导致的调度失败问题;
  • 22、【修复】执行器注册线程优化,修复极端情况下初始化失败时导致NPE问题;
  • 23、【修复】调度线程连接池优化,修复连接有效性校验超时问题;
  • 24、【修复】执行器注册表字段优化,解决执行器注册节点过多导致注册信息存储和更新失败的问题;
  • 25、【修复】轮训路由策略优化,修复小概率下并发问题;
  • 26、【修复】页面redirect跳转后https变为http问题修复;
  • 27、【修复】执行器日志清理优化,修复小概率下日志文件为空导致清理异常问题;

7.32 版本 v2.3.1 Release Notes[2022-05-21]

  • 1、【修复】修复风险漏洞,升级问题低版本项目依赖:CVE-2021-2471、CVE-2022-22965等。
  • 2、【修复】修复故障告警逻辑,邮箱校验逻辑下放至EmailJobAlarm中,避免对其他告警方式的干扰。
  • 3、【优化】调度通讯默认启用accessToken,提升系统安全性(建议生产环境自定义accessToken)。
  • 4、【优化】合并多项PR,项目代码结构、健壮性优化:PR-2833、PR-2812、PR-2541、PR-2537、PR-2514、PR-2509、PR-2591。
  • 5、【优化】任务线程名优化,提升可读性与问题定位效率(ISSUE-2527)。

7.33 版本 v2.4.0 Release Notes[规划中]

  • 1、【优化】[规划中]任务日志重构:一次调度只记录一条主任务,维护起止时间和状态。

  • 普通任务:只记录一条主任务;

  • 广播任务:记录一条主任务,每个分片任务记录一条次任务,关联在主任务上;

  • 重试任务:失败时,新增主任务。所有调度记录,包括入口调度和重试调度,均挂载主任务上。

  • 2、【优化】[规划中]分片任务:全部完成后才会出发后置节点;

7.34 版本 v2.4.1 Release Notes[规划中]

  • 1、[规划中]DAG流程任务

  • DAG任务:支持参数传递,共享数据:DAG任务创建、管理,DAG任务日志查看、操作;

  • 子任务:废弃

  • 2、[规划中]多数据库支持,DAO层通过JPA实现,不限制数据库类型;

  • 3、[规划中]告警增强:邮件告警 + webhook告警;

  • 4、[规划中]安全强化:AccessToken动态生成、动态启停;控制调度、回调;

  • 5、[规划中]任务导入导出工具,灵活支持版本升级、迁移等场景。

TODO LIST

  • 1、任务分片路由:分片采用一致性Hash算法计算出尽量稳定的分片顺序,即使注册机器存在波动也不会引起分批分片顺序大的波动;目前采用IP自然排序,可以满足需求,待定;

  • 2、调度隔离:调度中心针对不同执行器,各自维护不同的调度和远程触发组件。

  • 3、调度任务优先级;

  • 4、多数据库支持,DAO层通过JPA实现,不限制数据库类型;

  • 5、执行器Log清理功能:调度中心Log删除时同步删除执行器中的Log文件;

  • 6、延时任务:API触发,支持”动态传参、延时消费”;该功能与 XXL-MQ 冲突,该场景建议用后者;

  • 7、调度线程池改为协程方式实现,大幅降低系统内存消耗;

  • 8、任务、执行器数据全量本地缓存;新增消息表广播通知;

  • 9、忙碌转移优化,全部机器忙碌时不再直接失败;

  • 10、任务触发参数优化:支持选择 “Cron触发”、”固定间隔时间触发”、”指定时间点触发”、”不选择” 等;

  • 11、调度日志列表加上执行时长列,并支持排序;

  • 12、DAG流程任务:

  • 替换子任务,支持参数传递,共享数据:

  • 配置并列的”a-b、b-c”路径列表,构成串行、并行、dag任务流程,”dagre-d3”绘图;任务依赖,流程图,子任务+会签任务,各节点日志;支持根据成功、失败选择分支;

  • 分片任务:全部完成后才会出发后置节点;

  • 13、日期过滤:支持多个时间段排除;

  • 14、告警增强:

  • 邮件告警:支持自定义标题、模板格式;

  • webhook告警:支持自定义告警URL、请求体格式;

  • 15、新增任务运行模式 “GLUE模式(GO) “,支持GO任务;

  • 16、GLUE 模式 Web Ide 版本对比功能;

  • 17、注册中心优化,实时性注册发现:心跳注册间隔10s,refresh失败则首次注册并立即更新注册信息,心跳类似;30s过期销毁;

  • 18、提供执行器Docker镜像;

  • 19、脚本任务,支持数据参数,新版本仅支持单参数不支持需要兼容;

  • 20、批量调度:调度请求入queue,调度线程批量获取调度请求并发起远程调度;提高线程效率;

  • 21、执行器端口复用,复用容器端口提供通讯服务;

  • 22、分片任务全部成功后触发子任务;

  • 23、新增执行器描述属性;任务名称属性;

  • 24、自定义失败重试时间间隔;

  • 25、任务标签:方便搜索;

  • 26、执行器:dag执行器,不需要注册机器;