A distributed task scheduling framework

Overview

XXL-JOB

XXL-JOB, a distributed task scheduling framework.
-- Home Page --

Introduction

XXL-JOB is a distributed task scheduling framework. It's core design goal is to develop quickly and learn simple, lightweight, and easy to expand. Now, it's already open source, and many companies use it in production environments, real "out-of-the-box".

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

Documentation

Communication

Features

  • 1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
  • 2、动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效;
  • 3、调度中心HA(中心式):调度采用中心式设计,“调度中心”自研调度组件并支持集群部署,可保证调度中心HA;
  • 4、执行器HA(分布式):任务分布式执行,任务"执行器"支持集群部署,可保证任务执行HA;
  • 5、注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。同时,也支持手动录入执行器地址;
  • 6、弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务;
  • 7、触发策略:提供丰富的任务触发策略,包括:Cron触发、固定间隔触发、固定延时触发、API(事件)触发、人工触发、父子任务触发;
  • 8、调度过期策略:调度中心错过调度时间的补偿处理策略,包括:忽略、立即补偿触发一次等;
  • 9、阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度;
  • 10、任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务;
  • 11、任务失败重试:支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;其中分片任务支持分片粒度的失败重试;
  • 12、任务失败告警;默认提供邮件方式失败告警,同时预留扩展接口,可方便的扩展短信、钉钉等告警方式;
  • 13、路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等;
  • 14、分片广播任务:执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数开发分片任务;
  • 15、动态分片:分片广播任务以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。
  • 16、故障转移:任务路由策略选择"故障转移"情况下,如果执行器集群中某一台机器故障,将会自动Failover切换到一台正常的执行器发送调度请求。
  • 17、任务进度监控:支持实时监控任务进度;
  • 18、Rolling实时日志:支持在线查看调度结果,并且支持以Rolling方式实时查看执行器输出的完整的执行日志;
  • 19、GLUE:提供Web IDE,支持在线开发任务逻辑代码,动态发布,实时编译生效,省略部署上线的过程。支持30个版本的历史版本回溯。
  • 20、脚本任务:支持以GLUE模式开发和运行脚本任务,包括Shell、Python、NodeJS、PHP、PowerShell等类型脚本;
  • 21、命令行任务:原生提供通用命令行任务Handler(Bean任务,"CommandJobHandler");业务方只需要提供命令行即可;
  • 22、任务依赖:支持配置子任务依赖,当父任务执行结束且执行成功后将会主动触发一次子任务的执行, 多个子任务用逗号分隔;
  • 23、一致性:“调度中心”通过DB锁保证集群分布式调度的一致性, 一次任务调度只会触发一次执行;
  • 24、自定义任务参数:支持在线配置调度任务入参,即时生效;
  • 25、调度线程池:调度系统多线程触发调度运行,确保调度精确执行,不被堵塞;
  • 26、数据加密:调度中心和执行器之间的通讯进行数据加密,提升调度信息安全性;
  • 27、邮件报警:任务失败时支持邮件报警,支持配置多邮件地址群发报警邮件;
  • 28、推送maven中央仓库: 将会把最新稳定版推送到maven中央仓库, 方便用户接入和使用;
  • 29、运行报表:支持实时查看运行数据,如任务数量、调度次数、执行器数量等;以及调度报表,如调度日期分布图,调度成功分布图等;
  • 30、全异步:任务调度流程全异步化设计实现,如异步调度、异步运行、异步回调等,有效对密集调度进行流量削峰,理论上支持任意时长任务的运行;
  • 31、跨语言:调度中心与执行器提供语言无关的 RESTful API 服务,第三方任意语言可据此对接调度中心或者实现执行器。除此之外,还提供了 “多任务模式”和“httpJobHandler”等其他跨语言方案;
  • 32、国际化:调度中心支持国际化设置,提供中文、英文两种可选语言,默认为中文;
  • 33、容器化:提供官方docker镜像,并实时更新推送dockerhub,进一步实现产品开箱即用;
  • 34、线程池隔离:调度线程池进行隔离拆分,慢任务自动降级进入"Slow"线程池,避免耗尽调度线程,提高系统稳定性;
  • 35、用户管理:支持在线管理系统用户,存在管理员、普通用户两种角色;
  • 36、权限控制:执行器维度进行权限控制,管理员拥有全量权限,普通用户需要分配执行器权限后才允许相关操作;

Development

于2015年中,我在github上创建XXL-JOB项目仓库并提交第一个commit,随之进行系统结构设计,UI选型,交互设计……

于2015-11月,XXL-JOB终于RELEASE了第一个大版本V1.0, 随后我将之发布到OSCHINA,XXL-JOB在OSCHINA上获得了@红薯的热门推荐,同期分别达到了OSCHINA的“热门动弹”排行第一和git.oschina的开源软件月热度排行第一,在此特别感谢红薯,感谢大家的关注和支持。

于2015-12月,我将XXL-JOB发表到我司内部知识库,并且得到内部同事认可。

于2016-01月,我司展开XXL-JOB的内部接入和定制工作,在此感谢袁某和尹某两位同事的贡献,同时也感谢内部其他给与关注与支持的同事。

于2017-05-13,在上海举办的 "第62期开源中国源创会" 的 "放码过来" 环节,我登台对XXL-JOB做了演讲,台下五百位在场观众反响热烈(图文回顾 )。

于2017-10-22,又拍云 Open Talk 联合 Spring Cloud 中国社区举办的 "进击的微服务实战派上海站",我登台对XXL-JOB做了演讲,现场观众反响热烈并在会后与XXL-JOB用户热烈讨论交流。

于2017-12-11,XXL-JOB有幸参会《InfoQ ArchSummit全球架构师峰会》,并被拍拍贷架构总监"杨波老师"在专题 "微服务原理、基础架构和开源实践" 中现场介绍。

于2017-12-18,XXL-JOB参与"2017年度最受欢迎中国开源软件"评比,在当时已录入的约九千个国产开源项目中角逐,最终进入了前30强。

于2018-01-15,XXL-JOB参与"2017码云最火开源项目"评比,在当时已录入的约六千五百个码云项目中角逐,最终进去了前20强。

于2018-04-14,iTechPlus在上海举办的 "2018互联网开发者大会",我登台对XXL-JOB做了演讲,现场观众反响热烈并在会后与XXL-JOB用户热烈讨论交流。

于2018-05-27,在上海举办的 "第75期开源中国源创会" 的 "架构" 主题专场,我登台进行“基础架构与中间件图谱”主题演讲,台下上千位在场观众反响热烈(图文回顾 )。

于2018-12-05,XXL-JOB参与"2018年度最受欢迎中国开源软件"评比,在当时已录入的一万多个开源项目中角逐,最终排名第19名。

于2019-12-10,XXL-JOB参与"2019年度最受欢迎中国开源软件"评比,在当时已录入的一万多个开源项目中角逐,最终排名"开发框架和基础组件类"第9名。

于2020-11-16,XXL-JOB参与"2020年度最受欢迎中国开源软件"评比,在当时已录入的一万多个开源项目中角逐,最终排名"开发框架和基础组件类"第8名。

我司大众点评目前已接入XXL-JOB,内部别名《Ferrari》(Ferrari基于XXL-JOB的V1.1版本定制而成,新接入应用推荐升级最新版本)。 据最新统计, 自2016-01-21接入至2017-12-01期间,该系统已调度约100万次,表现优异。新接入应用推荐使用最新版本,因为经过数十个版本的更新,系统的任务模型、UI交互模型以及底层调度通讯模型都有了较大的优化和提升,核心功能更加稳定高效。

至今,XXL-JOB已接入多家公司的线上产品线,接入场景如电商业务,O2O业务和大数据作业等,截止最新统计时间为止,XXL-JOB已接入的公司包括不限于:

- 1、大众点评【美团点评】
- 2、山东学而网络科技有限公司;
- 3、安徽慧通互联科技有限公司;
- 4、人人聚财金服;
- 5、上海棠棣信息科技股份有限公司
- 6、运满满【运满满】
- 7、米其林 (中国区)【米其林】
- 8、妈妈联盟
- 9、九樱天下(北京)信息技术有限公司
- 10、万普拉斯科技有限公司【一加手机】
- 11、上海亿保健康管理有限公司
- 12、海尔馨厨【海尔】
- 13、河南大红包电子商务有限公司
- 14、成都顺点科技有限公司
- 15、深圳市怡亚通
- 16、深圳麦亚信科技股份有限公司
- 17、上海博莹科技信息技术有限公司
- 18、中国平安科技有限公司【中国平安】
- 19、杭州知时信息科技有限公司
- 20、博莹科技(上海)有限公司
- 21、成都依能股份有限责任公司
- 22、湖南高阳通联信息技术有限公司
- 23、深圳市邦德文化发展有限公司
- 24、福建阿思可网络教育有限公司
- 25、优信二手车【优信】
- 26、上海悠游堂投资发展股份有限公司【悠游堂】
- 27、北京粉笔蓝天科技有限公司
- 28、中秀科技(无锡)有限公司
- 29、武汉空心科技有限公司
- 30、北京蚂蚁风暴科技有限公司
- 31、四川互宜达科技有限公司
- 32、钱包行云(北京)科技有限公司
- 33、重庆欣才集团
- 34、咪咕互动娱乐有限公司【中国移动】
- 35、北京诺亦腾科技有限公司
- 36、增长引擎(北京)信息技术有限公司
- 37、北京英贝思科技有限公司
- 38、刚泰集团
- 39、深圳泰久信息系统股份有限公司
- 40、随行付支付有限公司
- 41、广州瀚农网络科技有限公司
- 42、享点科技有限公司
- 43、杭州比智科技有限公司
- 44、圳临界线网络科技有限公司
- 45、广州知识圈网络科技有限公司
- 46、国誉商业上海有限公司
- 47、海尔消费金融有限公司,嗨付、够花【海尔】
- 48、广州巴图鲁信息科技有限公司
- 49、深圳市鹏海运电子数据交换有限公司
- 50、深圳市亚飞电子商务有限公司
- 51、上海趣医网络有限公司
- 52、聚金资本
- 53、北京父母邦网络科技有限公司
- 54、中山元赫软件科技有限公司
- 55、中商惠民(北京)电子商务有限公司
- 56、凯京集团
- 57、华夏票联(北京)科技有限公司
- 58、拍拍贷【拍拍贷】
- 59、北京尚德机构在线教育有限公司
- 60、任子行股份有限公司
- 61、北京时态电子商务有限公司
- 62、深圳卷皮网络科技有限公司
- 63、北京安博通科技股份有限公司
- 64、未来无线网
- 65、厦门瓷禧网络有限公司
- 66、北京递蓝科软件股份有限公司
- 67、郑州创海软件科技公司
- 68、北京国槐信息科技有限公司
- 69、浪潮软件集团
- 70、多立恒(北京)信息技术有限公司
- 71、广州极迅客信息科技有限公司
- 72、赫基(中国)集团股份有限公司
- 73、海投汇
- 74、上海润益创业孵化器管理股份有限公司
- 75、汉纳森(厦门)数据股份有限公司
- 76、安信信托
- 77、岚儒财富
- 78、捷道软件
- 79、湖北享七网络科技有限公司
- 80、湖南创发科技责任有限公司
- 81、深圳小安时代互联网金融服务有限公司
- 82、湖北享七网络科技有限公司
- 83、钱包行云(北京)科技有限公司
- 84、360金融【360】
- 85、易企秀
- 86、摩贝(上海)生物科技有限公司
- 87、广东芯智慧科技有限公司
- 88、联想集团【联想】
- 89、怪兽充电
- 90、行圆汽车
- 91、深圳店店通科技邮箱公司
- 92、京东【京东】
- 93、米庄理财
- 94、咖啡易融
- 95、梧桐诚选
- 96、恒大地产【恒大】
- 97、昆明龙慧
- 98、上海涩瑶软件
- 99、易信【网易】
- 100、铜板街
- 101、杭州云若网络科技有限公司
- 102、特百惠(中国)有限公司
- 103、常山众卡运力供应链管理有限公司
- 104、深圳立创电子商务有限公司
- 105、杭州智诺科技股份有限公司
- 106、北京云漾信息科技有限公司
- 107、深圳市多银科技有限公司
- 108、亲宝宝
- 109、上海博卡软件科技有限公司
- 110、智慧树在线教育平台
- 111、米族金融
- 112、北京辰森世纪
- 113、云南滇医通
- 114、广州市分领网络科技有限责任公司
- 115、浙江微能科技有限公司
- 116、上海馨飞电子商务有限公司
- 117、上海宝尊电子商务有限公司
- 118、直客通科技技术有限公司
- 119、科度科技有限公司
- 120、上海数慧系统技术有限公司
- 121、我的医药网
- 122、多粉平台
- 123、铁甲二手机
- 124、上海海新得数据技术有限公司
- 125、深圳市珍爱网信息技术有限公司【珍爱网】
- 126、小蜜蜂
- 127、吉荣数科技
- 128、上海恺域信息科技有限公司
- 129、广州荔支网络有限公司【荔枝FM】
- 130、杭州闪宝科技有限公司
- 131、北京互联新网科技发展有限公司
- 132、誉道科技
- 133、山西兆盛房地产开发有限公司
- 134、北京蓝睿通达科技有限公司
- 135、月亮小屋(中国)有限公司【蓝月亮】
- 136、青岛国瑞信息技术有限公司
- 137、博雅云计算(北京)有限公司
- 138、华泰证券香港子公司
- 139、杭州东方通信软件技术有限公司
- 140、武汉博晟安全技术股份有限公司
- 141、深圳市六度人和科技有限公司
- 142、杭州趣维科技有限公司(小影)
- 143、宁波单车侠之家科技有限公司【单车侠】
- 144、丁丁云康信息科技(北京)有限公司
- 145、云钱袋
- 146、南京中兴力维
- 147、上海矽昌通信技术有限公司
- 148、深圳萨科科技
- 149、中通服创立科技有限责任公司
- 150、深圳市对庄科技有限公司
- 151、上证所信息网络有限公司
- 152、杭州火烧云科技有限公司【婚礼纪】
- 153、天津青芒果科技有限公司【芒果头条】
- 154、长飞光纤光缆股份有限公司
- 155、世纪凯歌(北京)医疗科技有限公司
- 156、浙江霖梓控股有限公司
- 157、江西腾飞网络技术有限公司
- 158、安迅物流有限公司
- 159、肉联网
- 160、北京北广梯影广告传媒有限公司
- 161、上海数慧系统技术有限公司
- 162、大志天成
- 163、上海云鹊医
- 164、上海云鹊医
- 165、墨迹天气【墨迹天气】
- 166、上海逸橙信息科技有限公司
- 167、沅朋物联
- 168、杭州恒生云融网络科技有限公司
- 169、绿米联创
- 170、重庆易宠科技有限公司
- 171、安徽引航科技有限公司(乐职网)
- 172、上海数联医信企业发展有限公司
- 173、良彬建材
- 174、杭州求是同创网络科技有限公司
- 175、荷马国际
- 176、点雇网
- 177、深圳市华星光电技术有限公司
- 178、厦门神州鹰软件科技有限公司
- 179、深圳市招商信诺人寿保险有限公司
- 180、上海好屋网信息技术有限公司
- 181、海信集团【海信】
- 182、信凌可信息科技(上海)有限公司
- 183、长春天成科技发展有限公司
- 184、用友金融信息技术股份有限公司【用友】
- 185、北京咖啡易融有限公司
- 186、国投瑞银基金管理有限公司
- 187、晋松(上海)网络信息技术有限公司
- 188、深圳市随手科技有限公司【随手记】
- 189、深圳水务科技有限公司
- 190、易企秀【易企秀】
- 191、北京磁云科技
- 192、南京蜂泰互联网科技有限公司
- 193、章鱼直播
- 194、奖多多科技
- 195、天津市神州商龙科技股份有限公司
- 196、岩心科技
- 197、车码科技(北京)有限公司
- 198、贵阳市投资控股集团
- 199、康旗股份
- 200、龙腾出行
- 201、杭州华量软件
- 202、合肥顶岭医疗科技有限公司
- 203、重庆表达式科技有限公司
- 204、上海米道信息科技有限公司
- 205、北京益友会科技有限公司
- 206、北京融贯电子商务有限公司
- 207、中国外汇交易中心
- 208、中国外运股份有限公司
- 209、中国上海晓圈教育科技有限公司
- 210、普联软件股份有限公司
- 211、北京科蓝软件股份有限公司
- 212、江苏斯诺物联科技有限公司
- 213、北京搜狐-狐友【搜狐】
- 214、新大陆网商金融
- 215、山东神码中税信息科技有限公司
- 216、河南汇顺网络科技有限公司
- 217、北京华夏思源科技发展有限公司
- 218、上海东普信息科技有限公司
- 219、上海鸣勃网络科技有限公司
- 220、广东学苑教育发展有限公司
- 221、深圳强时科技有限公司
- 222、上海云砺信息科技有限公司
- 223、重庆愉客行网络有限公司
- 224、数云
- 225、国家电网运检部
- 226、杭州找趣
- 227、浩鲸云计算科技股份有限公司
- 228、科大讯飞【科大讯飞】
- 229、杭州行装网络科技有限公司
- 230、即有分期金融
- 231、深圳法司德信息科技有限公司
- 232、上海博复信息科技有限公司
- 233、杭州云嘉云计算有限公司
- 234、有家民宿(有家美宿)
- 235、北京赢销通软件技术有限公司
- 236、浙江聚有财金融服务外包有限公司
- 237、易族智汇(北京)科技有限公司
- 238、合肥顶岭医疗科技开发有限公司
- 239、车船宝(深圳)旭珩科技有限公司)
- 240、广州富力地产有限公司
- 241、氢课(上海)教育科技有限公司
- 242、武汉氪细胞网络技术有限公司
- 243、杭州有云科技有限公司
- 244、上海仙豆智能机器人有限公司
- 245、拉卡拉支付股份有限公司【拉卡拉】
- 246、虎彩印艺股份有限公司
- 247、北京数微科技有限公司
- 248、广东智瑞科技有限公司
- 249、找钢网
- 250、九机网
- 251、杭州跑跑网络科技有限公司
- 252、深圳未来云集
- 253、杭州每日给力科技有限公司
- 254、上海齐犇信息科技有限公司
- 255、滴滴出行【滴滴】
- 256、合肥云诊信息科技有限公司
- 257、云知声智能科技股份有限公司
- 258、南京坦道科技有限公司
- 259、爱乐优(二手平台)
- 260、猫眼电影(私有化部署)【猫眼电影】
- 261、美团大象(私有化部署)【美团大象】
- 262、作业帮教育科技(北京)有限公司【作业帮】
- 263、北京小年糕互联网技术有限公司
- 264、山东矩阵软件工程股份有限公司
- 265、陕西国驿软件科技有限公司
- 266、君开信息科技
- 267、村鸟网络科技有限责任公司
- 268、云南国际信托有限公司
- 269、金智教育
- 270、珠海市筑巢科技有限公司
- 271、上海百胜软件股份有限公司
- 272、深圳市科盾科技有限公司
- 273、哈啰出行【哈啰】
- 274、途虎养车【途虎】
- 275、卡思优派人力资源集团
- 276、南京观为智慧软件科技有限公司
- 277、杭州城市大脑科技有限公司
- 278、猿辅导【猿辅导】
- 279、洛阳健创网络科技有限公司
- 280、魔力耳朵
- 281、亿阳信通
- 282、上海招鲤科技有限公司
- 283、四川商旅无忧科技服务有限公司
- 284、UU跑腿
- 285、北京老虎证券【老虎证券】
- 286、悠活省吧(北京)网络科技有限公司
- 287、F5未来商店
- 288、深圳环阳通信息技术有限公司
- 289、遠傳電信
- 290、作业帮(北京)教育科技有限公司【作业帮】
- 291、成都科鸿智信科技有限公司
- 292、北京木屋时代科技有限公司
- 293、大学通(哈尔滨)科技有限责任公司
- 294、浙江华坤道威数据科技有限公司
- 295、吉祥航空【吉祥航空】
- 296、南京圆周网络科技有限公司
- 297、广州市洋葱omall电子商务
- 298、天津联物科技有限公司
- 299、跑哪儿科技(北京)有限公司
- 300、深圳市美西西餐饮有限公司(喜茶)
- 301、平安不动产有限公司【平安】
- 302、江苏中海昇物联科技有限公司
- 303、湖南牙医帮科技有限公司
- 304、重庆民航凯亚信息技术有限公司(易通航)
- 305、递易(上海)智能科技有限公司
- 306、亚朵
- 307、浙江新课堂教育股份有限公司
- 308、北京蜂创科技有限公司
- 309、德一智慧城市信息系统有限公司
- 310、北京翼点科技有限公司
- 311、湖南智数新维度信息科技有限公司
- 312、北京玖扬博文文化发展有限公司
- 313、上海宇珩信息科技有限公司
- 314、全景智联(武汉)科技有限公司
- 315、天津易客满国际物流有限公司
- 316、南京爱福路汽车科技有限公司
- 317、我房旅居集团
- 318、湛江亲邻科技有限公司
- 319、深圳市姜科网络有限公司
- 320、青岛日日顺物流有限公司
- 321、南京太川信息技术有限公司
- 322、美图之家科技有限公司【美图】
- 323、南京太川信息技术有限公司
- 324、众薪科技(北京)有限公司
- 325、武汉安安物联科技有限公司
- 326、北京智客朗道网络科技有限公司
- 327、深圳市超级猩猩健身管理管理有限公司
- 328、重庆达志科技有限公司
- 329、上海享评信息科技有限公司
- 330、薪得付信息科技
- 331、跟谁学
- 332、中道(苏州)旅游网络科技有限公司
- 333、广州小卫科技有限公司
- 334、上海非码网络科技有限公司
- 335、途家网网络技术(北京)有限公司【途家】
- 336、广州辉凡信息科技有限公司
- 337、天维尔信息科技股份有限公司
- 338、上海极豆科技有限公司
- 339、苏州触达信息技术有限公司
- 340、北京热云科技有限公司
- 341、中智企服(北京)科技有限公司
- 342、易联云计算(杭州)有限责任公司
- 343、青岛航空股份有限公司【青岛航空】
- 344、山西博睿通科技有限公司
- 345、网易杭州网络有限公司【网易】
- 346、北京果果乐学科技有限公司
- 347、百望股份有限公司
- 348、中保金服(深圳)科技有限公司
- 349、天津运友物流科技股份有限公司
- 350、广东创能科技股份有限公司
- 351、上海倚博信息科技有限公司
- 352、深圳百果园实业(集团)股份有限公司
- 353、广州细刻网络科技有限公司
- 354、武汉鸿业众创科技有限公司
- 355、金锡科技(广州)有限公司
- 356、易瑞国际电子商务有限公司
- 357、奇点云
- 358、中视信息科技有限公司
- 359、开源项目:datax-web
- 360、云知声智能科技股份有限公司
- 361、开源项目:bboss
- 362、成都深驾科技有限公司
- 363、FunPlus【趣加】
- 364、杭州创匠信科技有限公司
- 365、龙匠(北京)科技发展有限公司
- 366、广州一链通互联网科技有限公司
- 367、上海星艾网络科技有限公司
- 368、虎博网络技术(上海)有限公司
- 369、青岛优米信息技术有限公司
- 370、八维通科技有限公司
- 371、烟台合享智星数据科技有限公司
- 372、东吴证券股份有限公司
- 373、中通云仓股份有限公司【中通】
- 374、北京加菲猫科技有限公司
- 375、北京匠心演绎科技有限公司
- 376、宝贝走天下
- 377、厦门众库科技有限公司
- 378、海通证券数据中心
- 389、湖南快乐通宝小额贷款有限公司
- 380、浙江大华技术股份有限公司
- 381、杭州魔筷科技有限公司
- 382、青岛掌讯通区块链科技有限公司
- 383、新大陆金融科技
- 384、常州玺拓软件科技有限公司
- 385、北京正保网格教育科技有限公司
- 386、统一企业(中国)投资有限公司【统一】
- 387、微革网络科技有限公司
- 388、杭州融易算科技有限公司
- 399、青岛上啥班网络科技有限公司
- 390、京东酒世界
- 391、杭州爱博仕科技有限公司
- 392、五星金服控股有限公司
- 393、福建乐摩物联科技有限公司
- 394、百炼智能科技有限公司
- 395、山东能源数智云科技有限公司
- 396、招商局能源运输股份有限公司
- 397、三一集团【三一】
- 398、东巴文(深圳)健康管理有限公司
- 399、索易软件
- 400、深圳市宁远科技有限公司
- 401、熙牛医疗
- 402、南京智鹤电子科技有限公司
- 403、嘀嗒出行【嘀嗒出行】
- 404、广州虎牙信息科技有限公司【虎牙】
- 405、广州欧莱雅百库网络科技有限公司【欧莱雅】
- 406、微微科技有限公司
- 407、我爱我家房地产经纪有限公司【我爱我家】
- 408、九号发现
- 409、薪人薪事
- 410、武汉氪细胞网络技术有限公司
- 411、广州市斯凯奇商业有限公司
- 412、微淼商学院
- 413、杭州车盛科技有限公司
- 414、深兰科技(上海)有限公司
- 415、安徽中科美络信息技术有限公司
- 416、比亚迪汽车工业有限公司【比亚迪】
- 417、湖南小桔信息技术有限公司
- 418、安徽科大国创软件科技有限公司
- 419、克而瑞
- 420、陕西云基华海信息技术有限公司
- 421、安徽深宁科技有限公司
- 422、广东康爱多数字健康有限公司
- 423、嘉里电子商务
- 424、上海时代光华教育发展有限公司
- 425、CityDo
- 426、上海禹知信息科技有限公司
- 427、广东智瑞科技有限公司
- 428、西安爱铭网络科技有限公司
- 429、心医国际数字医疗系统(大连)有限公司
- 430、乐其电商
- 431、锐达科技
- 432、天津长城滨银汽车金融有限公司
- 433、代码网
- 434、东莞市东城乔伦软件开发工作室
- 435、浙江百应科技有限公司
- 436、上海力爱帝信息技术有限公司(Red E)
- 437、云徙科技有限公司
- 438、北京康智乐思网络科技有限公司【大姨吗APP】
- 439、安徽开元瞬视科技有限公司
- 440、立方
- 441、厦门纵行科技
- 442、乐山-菲尼克斯半导体有限公司
- 443、武汉光谷联合集团有限公司
- 444、上海金仕达软件科技有限公司
- 445、深圳易世通达科技有限公司
- 446、爱动超越人工智能科技(北京)有限责任公司
- 447、迪普信(北京)科技有限公司
- 448、掌站科技(北京)有限公司
- 449、深圳市华云中盛股份有限公司
- 450、上海原圈科技有限公司
- 451、广州赞赏信息科技有限公司
- 452、Amber Group
- 453、德威国际货运代理(上海)公司
- 454、浙江杰夫兄弟智慧科技有限公司
- 455、信也科技
- 456、开思时代科技(深圳)有限公司
- 457、大连槐德科技有限公司
- 458、同程生活
- 459、松果出行
- 460、企鹅杏仁集团
- 461、宁波科云信息科技有限公司
- 462、上海格蓝威驰信息科技有限公司
- 463、杭州趣淘鲸科技有限公司
- 464、湖州市数字惠民科技有限公司
- 465、乐普(北京)医疗器械股份有限公司
- 466、广州市晴川高新技术开发有限公司
- 467、山西缇客科技有限公司
- 468、徐州卡西穆电子商务有限公司
- 469、格创东智科技有限公司
- 470、世纪龙信息网络有限责任公司
- 471、邦道科技有限公司
- 472、河南中盟新云科技股份有限公司
- 473、横琴人寿保险有限公司
- 474、上海海隆华钟信息技术有限公司
- 475、上海久湛
- 476、上海仙豆智能机器人有限公司
- 477、广州汇尚网络科技有限公司
- 478、深圳市阿卡索资讯股份有限公司
- 479、青岛佳家康健康管理有限责任公司
- 480、蓝城兄弟
- 481、成都天府通金融服务股份有限公司
- 482、深圳云镖网络科技有限公司
- 483、上海影创科技
- 484、成都艾拉物联
- 485、北京客邻尚品网络技术有限公司
- 486、IT实战联盟
- 487、杭州尤拉夫科技有限公司
- 488、中大检测(湖南)股份有限公司
- 489、江苏电老虎工业互联网股份有限公司
- 490、上海助通信息科技有限公司
- 491、北京符节科技有限公司
- 492、杭州英祐科技有限公司
- 493、江苏电老虎工业互联网股份有限公司
- 494、深圳市点猫科技有限公司
- 495、杭州天音
- 496、深圳市二十一科技互联网有限公司
- 497、海南海口翎度科技
- 498、北京小趣智品科技有限公司
- 499、广州石竹计算机软件有限公司
- 500、深圳市惟客数据科技有限公司
- 501、中国医疗器械有限公司
- 502、上海云谦科技有限公司
- 503、上海磐农信息科技有限公司
- 504、广州领航食品有限公司
- 505、青岛掌讯通区块链科技有限公司
- 506、北京新网数码信息技术有限公司
- 507、超体信息科技(深圳)有限公司
- 508、长沙店帮手信息科技有限公司
- 509、上海助弓装饰工程有限公司
- 510、杭州寻联网络科技有限公司
- 511、成都大淘客科技有限公司
- 512、松果出行
- 513、深圳市唤梦科技有限公司
- 514、上汽集团商用车技术中心
- 515、北京中航讯科技股份有限公司
- 516、北龙中网(北京)科技有限责任公司
- 517、前海超级前台(深圳)信息技术有限公司
- ……

更多接入的公司,欢迎在 登记地址 登记,登记仅仅为了产品推广。

欢迎大家的关注和使用,XXL-JOB也将拥抱变化,持续发展。

Contributing

Contributions are welcome! Open a pull request to fix a bug, or open an Issue to discuss a new feature or change.

欢迎参与项目贡献!比如提交PR修复一个bug,或者新建 Issue 讨论新特性或者变更。

Copyright and License

This product is open source and free, and will continue to provide free community technical support. Individual or enterprise users are free to access and use.

  • Licensed under the GNU General Public License (GPL) v3.
  • Copyright (c) 2015-present, xuxueli.

产品开源免费,并且将持续提供免费的社区技术支持。个人或企业内部可自由的接入和使用。如有需要可邮件联系作者免费获取项目授权。

Donate

No matter how much the donation amount is enough to express your thought, thank you very much :) To donate

无论捐赠金额多少都足够表达您这份心意,非常感谢 :) 前往捐赠

Comments
  • 升级到2.0.0版本之后 执行器启动之后jetty停了

    升级到2.0.0版本之后 执行器启动之后jetty停了

    你好,我使用的版本是1.9.2。将xxl-job-admin做成docker镜像部署,执行器用springboot在宿主机上部署,使用JDK11。当从1.9.2升级到2.0.0之后,执行器启动成功之后,jetty关闭了,导致任务执行失败. 执行器启动日志:

    2018-11-05 17:39:44.889  INFO 26133 --- [      Thread-18] c.x.j.c.t.ExecutorRegistryThread         : >>>>>>>>>>> xxl-job registry success, registryParam:RegistryParamm
    {registGroup='EXECUTOR', registryKey='poster-executor', registryValue='192.168.4.181:9999'}, registryResult:ReturnT [code=200, msg=null, content=null]
                                                                                                                                                        27241,9       95%
    2018-11-05 17:37:10.571  INFO 26133 --- [           main] c.m.p.j.c.JobConfig                      : >>>>>>>>>>> xxl-job config init.
    2018-11-05 17:37:10.879  INFO 26133 --- [           main] c.x.r.r.p.XxlRpcProviderFactory          : >>>>>>>>>>> xxl-rpc, provider factory add service success. serviceKey = com.xxl.job.core.biz.ExecutorBiz, serviceBean = class com.xxl.job.core.biz.impl.ExecutorBizImpl
    2018-11-05 17:37:11.052  INFO 26133 --- [       Thread-6] o.e.j.u.log                              : Logging initialized @39922ms to org.eclipse.jetty.util.log.Slf4jLog
    2018-11-05 17:37:11.486  INFO 26133 --- [       Thread-6] o.e.j.s.Server                           : jetty-9.4.12.v20180830; built: 2018-08-30T13:59:14.071Z; git: 27208684755d94a92186989f695db2d7b21ebc51; jvm 11+28
    2018-11-05 17:37:12.118  INFO 26133 --- [       Thread-6] o.e.j.s.AbstractConnector                : Started ServerConnector@54e5742a{HTTP/1.1,[http/1.1]}{0.0.0.0:9999}
    2018-11-05 17:37:12.118  INFO 26133 --- [       Thread-6] o.e.j.s.Server                           : Started @40989ms
    2018-11-05 17:37:12.119  INFO 26133 --- [       Thread-6] c.x.r.r.n.Server                         : >>>>>>>>>>> xxl-rpc remoting server start success, nettype = com.xxl.rpc.remoting.net.impl.jetty.server.JettyServer, port = 9999
    2018-11-05 17:37:14.080  INFO 26133 --- [           main] o.s.s.c.ThreadPoolTaskExecutor           : Initializing ExecutorService 'applicationTaskExecutor'
    2018-11-05 17:37:14.692  INFO 26133 --- [      Thread-18] c.x.j.c.t.ExecutorRegistryThread         : >>>>>>>>>>> xxl-job registry success, registryParam:RegistryParam{registGroup='EXECUTOR', registryKey='poster-executor', registryValue='192.168.4.181:9999'}, registryResult:ReturnT [code=200, msg=null, content=null]
    2018-11-05 17:37:16.638  INFO 26133 --- [           main] o.s.b.a.e.w.EndpointLinksResolver        : Exposing 2 endpoint(s) beneath base path '/actuator'
    2018-11-05 17:37:17.281  INFO 26133 --- [           main] o.s.b.w.e.u.UndertowServletWebServer     : Undertow started on port(s) 8280 (http) with context path '/job'
    2018-11-05 17:37:17.330  INFO 26133 --- [           main] c.m.p.j.PosterJobExecutorApp             : Started PosterJobExecutorApp in 36.74 seconds (JVM running for 46.201)
    2018-11-05 17:37:42.191  INFO 26133 --- [       Thread-6] o.e.j.s.AbstractConnector                : Stopped ServerConnector@54e5742a{HTTP/1.1,[http/1.1]}{0.0.0.0:9999}
    2018-11-05 17:37:44.731  INFO 26133 --- [      Thread-18] c.x.j.c.t.ExecutorRegistryThread         : >>>>>>>>>>> xxl-job registry success, registryParam:RegistryParam{registGroup='EXECUTOR', registryKey='poster-executor', registryValue='192.168.4.181:9999'}, registryResult:ReturnT [code=200, msg=null, content=null]
    

    job-admin日志:

    2018-11-05 20:40:10,663 ERROR [pool-3-thread-2] c.x.j.a.core.trigger.XxlJobTrigger [XxlJobTrigger.java : 193] >>>>>>>>>>> xxl-job trigger error, please check if the executor[192.168.4.181:9999] is running.
    com.xxl.rpc.util.XxlRpcException: com.xxl.rpc.util.XxlRpcException: xxl-rpc, request timeout at:1541421610663, request:XxlRpcRequest{requestId='91baedc9-c76e-4ef5-929a-7633db5aba57', createMillisTime=1541421600372, accessToken='', className='com.xxl.job.core.biz.ExecutorBiz', methodName='run', parameterTypes=[class com.xxl.job.core.biz.model.TriggerParam], parameters=[TriggerParam{jobId=1, executorHandler='startPresell', executorParams='', executorBlockStrategy='SERIAL_EXECUTION', executorTimeout=0, logId=733234, logDateTim=1541421600351, glueType='BEAN', glueSource='', glueUpdatetime=1539165941000, broadcastIndex=0, broadcastTotal=1}], version='null'}
            at com.xxl.rpc.remoting.invoker.reference.XxlRpcReferenceBean$1.invoke(XxlRpcReferenceBean.java:166)
            at com.sun.proxy.$Proxy75.run(Unknown Source)
            at com.xxl.job.admin.core.trigger.XxlJobTrigger.runExecutor(XxlJobTrigger.java:191)
            at com.xxl.job.admin.core.trigger.XxlJobTrigger.processTrigger(XxlJobTrigger.java:142)
            at com.xxl.job.admin.core.trigger.XxlJobTrigger.trigger(XxlJobTrigger.java:76)
            at com.xxl.job.admin.core.thread.JobTriggerPoolHelper$1.run(JobTriggerPoolHelper.java:35)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:622)
    

    同样的配置,切换回1.9.2版本就可以。

    opened by buzzxu 27
  • 偶发性时间点调度超时错误

    偶发性时间点调度超时错误

    Which version of XXL-JOB do you using?

    版本 2.0.2

    Expected behavior

    xxl-job-admin在外部基础环境中,执行器在k8s环境中,通过LB转发请求, 调度每隔15s调度一次单独任务,期望全部调度完成。

    Actual behavior

    偶发性时间点调度错误, address:internal-lb-inter-test.cn-north-1.elb.amazonaws.com.cn/test/metis/ code:500 msg:com.xxl.rpc.util.XxlRpcException: xxl-rpc, request timeout at:1563778745104, request:XxlRpcRequest{requestId='47d631a8-b661-46b5-8619-83e45fdee67f', createMillisTime=1563778740103, accessToken='', className='com.xxl.job.core.biz.ExecutorBiz', methodName='run', parameterTypes=[class com.xxl.job.core.biz.model.TriggerParam], parameters=[TriggerParam{jobId=121, executorHandler='AutoCompleteOrder', executorParams='', executorBlockStrategy='SERIAL_EXECUTION', executorTimeout=0, logId=313393, logDateTim=1563778740089, glueType='BEAN', glueSource='', glueUpdatetime=1562553151000, broadcastIndex=0, broadcastTotal=1}], version='null'} at com.xxl.rpc.remoting.net.params.XxlRpcFutureResponse.get(XxlRpcFutureResponse.java:117) at com.xxl.rpc.remoting.invoker.reference.XxlRpcReferenceBean$1.invoke(XxlRpcReferenceBean.java:219) at com.sun.proxy.$Proxy80.run(Unknown Source) at com.xxl.job.admin.core.trigger.XxlJobTrigger.runExecutor(XxlJobTrigger.java:196) at com.xxl.job.admin.core.trigger.XxlJobTrigger.processTrigger(XxlJobTrigger.java:149) at com.xxl.job.admin.core.trigger.XxlJobTrigger.trigger(XxlJobTrigger.java:74) at com.xxl.job.admin.core.thread.JobTriggerPoolHelper$3.run(JobTriggerPoolHelper.java:77) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)

    发生超时错误的时间点前后都是调度正常,15秒调度一次。 发生超时错误的时间点前后的调度请求LB日志正常、有记录。

    Other information

    通过LB请求日志,发现 xxl-rpc 当前发出的请求未到达LB,认定为 XXL-RPC-CORE,请求未发出。

    opened by pinkhello 21
  • 请教下,如果执行器用docker的方式来运行,执行的IP怎么处理?

    请教下,如果执行器用docker的方式来运行,执行的IP怎么处理?

    Please answer some questions before submitting your issue. Thanks!

    Which version of XXL-JOB do you using?

    Expected behavior

    Actual behavior

    Steps to reproduce the behavior

    Other information

    help wanted/suggest 
    opened by utopro 17
  • 自动注册失败

    自动注册失败

    Please answer some questions before submitting your issue. Thanks!

    多个项目,相同的配制,只有这个项目自动注册才出现这样的情况,自动注册失败,管理后台无法自动获取到节点信息

    Which version of XXL-JOB do you using?

    2.1.2

    Expected behavior

    Actual behavior

    Steps to reproduce the behavior

    Other information

    2019-12-19 21:15:00 | INFO | xxl-job, executor ExecutorRegistryThread | com.xxl.job.core.thread.ExecutorRegistryThread | >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='travel', registryValue='travel-9999:9999'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting (url=http://xxl.debug.istarguide.com/xxl-job-admin/api/registry) response content invalid(<!DOCTYPE html><html><head> <link rel="icon" href="/xxl-job-admin/static/favicon.ico" /> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- Tell the browser to be responsive to screen width --> <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"> <!-- Bootstrap --> <link rel="stylesheet" href="/xxl-job-admin/static/adminlte/bower_components/bootstrap/css/bootstrap.min.css"> <!-- Font Awesome --> <link rel="stylesheet" href="/xxl-job-admin/static/adminlte/bower_components/font-awesome/css/font-awesome.min.css"> <!-- Ionicons --> <link rel="stylesheet" href="/xxl-job-admin/static/adminlte/bower_components/Ionicons/css/ionicons.min.css"> <!-- Theme style --> <link rel="stylesheet" href="/xxl-job-admin/static/adminlte/dist/css/AdminLTE.min.css"> <!-- AdminLTE Skins. Choose a skin from the css/skins folder instead of downloading all of them to reduce the load. --> <link rel="stylesheet" href="/xxl-job-admin/static/adminlte/dist/css/skins/_all-skins.min.css"> <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> <!-- pace --> <link rel="stylesheet" href="/xxl-job-admin/static/adminlte/bower_components/PACE/themes/blue/pace-theme-flash.css"> <link rel="stylesheet" href="/xxl-job-admin/static/adminlte/plugins/iCheck/square/blue.css"> <title>任务调度中心</title></head><body class="hold-transition login-page"> <div class="login-box"> <div class="login-logo"> <a><b>XXL</b>JOB</a> </div> <form id="loginForm" method="post" > <div class="login-box-body"> <p class="login-box-msg">任务调度中心</p> <div class="form-group has-feedback"> <input type="text" name="userName" class="form-control" placeholder="请输入登录账号" maxlength="20" > <span class="glyphicon glyphicon-envelope form-control-feedback"></span> </div> <div class="form-group has-feedback"> <input type="password" name="password" class="form-control" placeholder="请输入登录密码" maxlength="20" > <span class="glyphicon glyphicon-lock form-control-feedback"></span> </div> <div class="row"> <div class="col-xs-8"> <div class="checkbox icheck"> <label> <input type="checkbox" name="ifRemember" > &nbsp; 记住密码 </label> </div> </div><!-- /.col --> <div class="col-xs-4"> <button type="submit" class="btn btn-primary btn-block btn-flat">登录</button> </div> </div> </div> </form> </div> <!-- jQuery 2.1.4 --> <script src="/xxl-job-admin/static/adminlte/bower_components/jquery/jquery.min.js"></script> <!-- Bootstrap 3.3.5 --> <script src="/xxl-job-admin/static/adminlte/bower_components/bootstrap/js/bootstrap.min.js"></script> <!-- FastClick --> <script src="/xxl-job-admin/static/adminlte/bower_components/fastclick/fastclick.js"></script> <!-- AdminLTE App --> <script src="/xxl-job-admin/static/adminlte/dist/js/adminlte.min.js"></script> <!-- jquery.slimscroll --> <script src="/xxl-job-admin/static/adminlte/bower_components/jquery-slimscroll/jquery.slimscroll.min.js"></script> <!-- pace --> <script src="/xxl-job-admin/static/adminlte/bower_components/PACE/pace.min.js"></script> <script src="/xxl-job-admin/static/plugins/jquery/jquery.cookie.js"></script> <script src="/xxl-job-admin/static/plugins/jquery/jquery.validate.min.js"></script> <script src="/xxl-job-admin/static/plugins/layer/layer.js"></script> <script src="/xxl-job-admin/static/js/common.1.js"></script> <script> var base_url = '/xxl-job-admin'; var I18n = {"dataTable_sSortAscending":": 以升序排列此列","jobgroup_field_appName_length":"AppName长度限制为4~64","jobconf_route_round":"轮询","system_update_fail":"更新失败","jobconf_block_SERIAL_EXECUTION":"单机串行","jobconf_route_lfu":"最不经常使用","dataTable_sLast":"末页","jobinfo_shard_index":"分片序号","jobinfo_field_executorparam":"任务参数","user_add":"新增用户","jobinfo_field_gluetype":"运行模式","job_dashboard_job_num":"任务数量","system_api_error":"接口异常","jobconf_route_last":"最后一个","jobinfo_opt_log":"查询日志","jobinfo_field_id":"任务ID","jobinfo_field_executorRouteStrategy":"路由策略","jobinfo_job":"任务","daterangepicker_ranges_last_month":"上个月","jobconf_trigger_exe_regaddress":"执行器-地址列表","system_not_found":"不存在","user_password_update_placeholder":"请输入新密码,为空则不更新密码","jobinfo_shard_total":"分片总数","jobgroup_empty":"不存在有效执行器,请联系管理员","system_update_suc":"更新成功","login_password_lt_4":"登录密码不应低于4位","daterangepicker_ranges_this_month":"本月","dataTable_sSearch":"搜索","job_dashboard_trigger_num_tip":"调度中心触发的调度次数","user_role":"角色","user_role_admin":"管理员","joblog_handleCode_500":"失败","daterangepicker_custom_starttime":"起始时间","joblog_status_suc":"成功","joblog_handleCode_502":"失败(超时)","jobgroup_field_order_digits":"请输入整数","jobinfo_name":"任务管理","jobinfo_field_alarmemail":"报警邮件","joblog_rolling_log_refresh":"刷新","daterangepicker_custom_endtime":"结束时间","logout_btn":"注销","jobconf_trigger_type_cron":"Cron触发","jobinfo_field_executorFailRetryCount_placeholder":"失败重试次数,大于零时生效","daterangepicker_custom_monthnames":"一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月","joblog_clean_log":"日志清理","user_permission":"权限","dataTable_sLoadingRecords":"载入中...","system_opt_edit":"编辑","admin_name":"任务调度中心","job_dashboard_report_loaddata_fail":"调度报表数据加载异常","user_role_normal":"普通用户","login_param_unvalid":"账号或密码错误","jobconf_trigger_type_retry":"失败重试触发","login_password_empty":"请输入登录密码","jobinfo_field_cron_unvalid":"Cron格式非法","jobconf_beat":"心跳检测","joblog_clean_type_2":"清理三个月之前日志数据","job_dashboard_date_report":"日期分布图","joblog_clean_type_1":"清理一个月之前日志数据","joblog_kill_log":"终止任务","user_update_loginuser_limit":"禁止操作当前登录账号","joblog_clean_type_6":"清理一万条以前日志数据","joblog_clean_type_5":"清理一千条以前日志数据","jobgroup_field_order":"排序","joblog_clean_type_4":"清理一年之前日志数据","joblog_clean_type_3":"清理六个月之前日志数据","jobgroup_field_title_length":"名称长度限制为4~12","jobconf_route_failover":"故障转移","joblog_status":"状态","system_search":"搜索","dataTable_sFirst":"首页","jobgroup_del_limit_1":"拒绝删除, 系统至少保留一个执行器","jobconf_trigger_run":"触发调度","jobinfo_field_update":"更新任务","jobgroup_del_limit_0":"拒绝删除,该执行器使用中","admin_version":"2.1.1-SNAPSHOT","jobconf_route_consistenthash":"一致性HASH","system_ok":"确定","jobconf_trigger_admin_adress":"调度机器","user_username_valid":"限制以小写字母开头,由小写字母、数字组成","system_add_suc":"新增成功","login_username_placeholder":"请输入登录账号","jobconf_trigger_address_empty":"调度失败:执行器地址为空","jobconf_monitor_detail":"监控告警明细","jobinfo_field_childJobId":"子任务ID","jobconf_route_lru":"最近最久未使用","jobinfo_field_executorTimeout_placeholder":"任务超时时间,单位秒,大于零时生效","joblog_rolling_log":"执行日志","jobconf_route_busyover":"忙碌转移","system_please_choose":"请选择","job_help_document":"官方文档","jobconf_route_shard":"分片广播","joblog_clean":"清理","jobinfo_glue_jobid_unvalid":"任务ID非法","jobconf_route_first":"第一个","jobinfo_field_jobgroup":"执行器","system_lengh_limit":"长度限制","dataTable_sSortDescending":": 以降序排列此列","joblog_logid_unvalid":"日志ID非法","logout_confirm":"确认注销登录?","dataTable_sInfoFiltered":"(由 MAX 项结果过滤)","daterangepicker_ranges_recent_week":"最近一周","user_username_repeat":"账号重复","daterangepicker_ranges_recent_hour":"最近一小时","jobgroup_field_registryList_unvalid":"机器地址格式非法","joblog_field_triggerTime":"调度时间","jobconf_block_COVER_EARLY":"覆盖之前调度","system_opt":"操作","joblog_field_handleCode":"执行结果","joblog_status_running":"进行中","user_password":"密码","job_dashboard_jobgroup_num":"执行器数量","jobconf_trigger_type_manual":"手动触发","login_btn":"登录","jobinfo_field_author":"负责人","joblog_field_executorAddress":"执行器地址","joblog_handleCode_200":"成功","dataTable_sPrevious":"上页","system_permission_limit":"权限拦截","joblog_kill_log_byman":"人为操作主动终止","job_dashboard_name":"运行报表","dataTable_sProcessing":"处理中...","jobconf_trigger_type":"任务触发类型","system_cancel":"取消","jobinfo_field_executorFailRetryCount":"失败重试次数","daterangepicker_ranges_recent_month":"最近一月","dataTable_sInfoEmpty":"无记录","login_success":"登录成功","system_digits":"整数","job_help":"使用教程","daterangepicker_custom_name":"自定义","system_tips":"系统提示","jobinfo_field_jobdesc":"任务描述","jobgroup_field_appName_limit":"限制以小写字母开头,由小写字母、数字和中划线组成","jobconf_monitor_alarm_title":"告警类型","system_opt_del":"删除","system_nav":"导航","jobgroup_field_addressType_limit":"手动录入注册方式,机器地址不可为空","job_dashboard_jobgroup_num_tip":"调度中心在线的执行器机器数量","jobconf_trigger_type_api":"API触发","jobgroup_field_title":"名称","system_fail":"失败","jobgroup_del":"删除执行器","dataTable_sEmptyTable":"表中数据为空","joblog_clean_type_unvalid":"清理类型参数异常","jobconf_monitor":"任务调度中心监控报警","system_opt_fail":"操作失败","job_dashboard_report":"调度报表","jobconf_trigger_child_run":"触发子任务","jobinfo_glue_rollback":"版本回溯","joblog_status_fail":"失败","jobgroup_field_orderrange":"取值范围为1~1000","system_close":"关闭","joblog_clean_type_9":"清理所有日志数据","joblog_clean_type_8":"清理十万条以前日志数据","system_show":"查看","joblog_clean_type_7":"清理三万条以前日志数据","jobinfo_field_cron_never_fire":"Cron非法,永远不会触发","jobgroup_edit":"编辑执行器","jobinfo_opt_stop":"停止","jobinfo_script_location":"脚本位置","jobgroup_field_registryList_placeholder":"请输入执行器地址列表,多地址逗号分隔","jobinfo_field_childJobId_placeholder":"请输入子任务的任务ID,如存在多个则逗号分隔","joblog_clean_type":"清理方式","joblog_field_triggerMsg":"调度备注","user_update":"更新用户","login_remember_me":"记住密码","system_opt_suc":"操作成功","jobgroup_name":"执行器管理","daterangepicker_custom_daysofweek":"日,一,二,三,四,五,六","jobinfo_glue_remark":"源码备注","logout_success":"注销成功","jobinfo_field_timeout":"任务超时时间","user_manage":"用户管理","jobgroup_list":"执行器列表","login_password_placeholder":"请输入登录密码","jobconf_idleBeat":"空闲检测","system_empty":"无","joblog_rolling_log_failoften":"终止请求Rolling日志,请求失败次数超上限,可刷新页面重新加载日志","jobconf_callback_child_msg1":"{0}/{1} [任务ID={2}], 触发{3}, 触发备注: {4} <br>","joblog_name":"调度日志","dataTable_sNext":"下页","admin_name_full":"分布式任务调度平台XXL-JOB","daterangepicker_ranges_yesterday":"昨日","logout_fail":"注销失败","system_success":"成功","login_param_empty":"账号或密码为空","jobgroup_add":"新增执行器","job_dashboard_trigger_num":"调度次数","jobinfo_opt_registryinfo":"注册节点","jobconf_monitor_alarm_content":"告警内容","joblog_status_all":"全部","jobconf_route_random":"随机","system_unvalid":"非法","jobinfo_opt_start":"启动","login_username_lt_4":"登录账号不应低于4位","joblog_kill_log_limit":"调度失败,无法终止日志","jobconf_callback_child_msg2":"{0}/{1} [任务ID={2}], 触发失败, 触发备注: 任务ID格式错误 <br>","dataTable_sZeroRecords":"没有匹配结果","jobconf_trigger_type_parent":"父任务触发","jobconf_block_DISCARD_LATER":"丢弃后续调度","joblog_field_handleTime":"执行时间","dataTable_sLengthMenu":"每页 MENU 条记录","jobgroup_field_registryList":"机器地址","system_all":"全部","jobinfo_field_alarmemail_placeholder":"请输入报警邮件,多个邮件地址则逗号分隔","jobgroup_field_addressType":"注册方式","job_dashboard_job_num_tip":"调度中心运行的任务数量","jobconf_trigger_exe_regtype":"执行器-注册方式","jobgroup_field_addressType_1":"手动录入","jobgroup_field_addressType_0":"自动注册","jobconf_monitor_alarm_type":"调度失败","joblog_rolling_log_triggerfail":"任务发起调度失败,无法查看执行日志","dataTable_sInfo":"第 PAGE 页 ( 总共 PAGES 页,TOTAL 条记录 )","jobinfo_opt_run":"执行一次","user_username":"账号","jobinfo_field_executorBlockStrategy":"阻塞处理策略","login_username_empty":"请输入登录账号","joblog_field_handleMsg":"执行备注","jobinfo_field_add":"新增","daterangepicker_ranges_today":"今日","system_save":"保存","job_dashboard_rate_report":"成功比例图","joblog_field_triggerCode":"调度结果","system_status":"状态","system_please_input":"请输入","jobinfo_glue_gluetype_unvalid":"该任务非GLUE模式","system_add_fail":"新增失败","login_fail":"登录失败","jobinfo_glue_remark_limit":"源码备注长度限制为4~100"}; </script><script src="/xxl-job-admin/static/adminlte/plugins/iCheck/icheck.min.js"></script><script src="/xxl-job-admin/static/js/login.1.js"></script></body></html>)., content=null]

    opened by yuanliubei 16
  • VERSION 2.0.1  com.xxl.rpc.util.XxlRpcException: java.io.EOFException: HttpConnectionOverHTTP

    VERSION 2.0.1 com.xxl.rpc.util.XxlRpcException: java.io.EOFException: HttpConnectionOverHTTP

    VERSION 2.0.1

    有人遇到过下面这张情况么,任务调度的时候,间歇性报错~

    半分钟执行一次,查日志,任务也没有堆积,不晓得下面的错误是啥意思

    心跳检测: address:192.168.2.44:9999 code:500 msg:com.xxl.rpc.util.XxlRpcException: java.io.EOFException: HttpConnectionOverHTTP@6cb24963(l:/192.168.2.44:2672 <-> r:/192.168.2.44:9999,closed=false)[HttpChannelOverHTTP@52c1a0cb(exchange=HttpExchange@1b1c90ba req=TERMINATED/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@7bce7ccb(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator{s=START}],recv=HttpReceiverOverHTTP@5c9cb80(rsp=IDLE,failure=null)[HttpParser{s=CLOSED,0 of -1}]]] at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.earlyEOF(HttpReceiverOverHTTP.java:277) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1305) at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.shutdown(HttpReceiverOverHTTP.java:182) at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:129) at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:69) at org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:90) at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:174) at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) at java.lang.Thread.run(Thread.java:748)

    wontfix 
    opened by sunhao91 14
  • 执行器启动成功后,控制台一直反复报:xxl-rpc provider netty_http server caught exception

    执行器启动成功后,控制台一直反复报:xxl-rpc provider netty_http server caught exception

    执行器启动成功后,控制台一直反复报:xxl-rpc provider netty_http server caught exception 如下:

    ===2019-08-22 15:09:28.821 ERROR com.xxl.rpc.remoting.net.impl.netty_http.server.NettyHttpServerHandler Line:129 - >>>>>>>>>>> xxl-rpc provider netty_http server caught exception
    --
      | java.io.IOException: Connection reset by peer
      | at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
      | at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
      | at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
      | at sun.nio.ch.IOUtil.read(IOUtil.java:192)
      | at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
      | at io.netty.buffer.PooledUnsafeDirectByteBuf.setBytes(PooledUnsafeDirectByteBuf.java:288)
      | at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1108)
      | at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:347)
      | at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:148)
      | at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:628)
      | at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:563)
      | at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:480)
      | at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:442)
      | at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
      | at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
      | at java.lang.Thread.run(Thread.java:748)
    

    环境: 1.执行器为基于Springboot 2.0.6搭建的项目 2.依赖xxl-job版本信息为 <xxl-job-core.version>2.1.0</xxl-job-core.version> 3.任务调度中心版本为 image

    场景: 1.虽然报错,但是执行器能被正常调用并执行,调度日志也都显示成功 2.执行器项目部署在阿里云edas正式环境命名空间的k8s集群上,调度器部署在阿里云测试环境命名空间的k8s集群上(不同命名空间互访相当于跨平台访问) 3.执行器配置的负载均衡外网端口号和映射的应用端口号都和执行器的端口号(9990)一样,但是负载均衡协议是TCP而非HTTP(选不了HTTP) image 4.如果执行器配置的负载均衡所映射的应用端口号为执行器服务本身启动的端口号(server.port=18083)而非执行器端口号(xxl.job.executor.port=9990),则启动后不会报如上错误,但是调度器会连接不到执行器(因为执行器的端口号没有通过外网负载均衡映射给外网?) image image

    opened by lvgitt 12
  • 任务重复调度

    任务重复调度

    Please answer some questions before submitting your issue. Thanks!

    Which version of XXL-JOB do you using?

    v2.1.0

    Expected behavior

    通过cron表达式0 0 20 19 8 ? 2019指定在固定时刻触发一次任务调度

    Actual behavior

    在该时间点触发了多个任务调度 image

    [INFO ] 2019-08-19 20:00:00.056 [Thread-21] MyJobHandler:hellloooooooooo-0 0 20 19 8 ? 2019
    [INFO ] 2019-08-19 20:00:00.274 [Thread-21] MyJobHandler:hellloooooooooo-0 0 20 19 8 ? 2019
    [INFO ] 2019-08-19 20:00:00.274 [Thread-21] MyJobHandler:hellloooooooooo-0 0 20 19 8 ? 2019
    [INFO ] 2019-08-19 20:00:00.275 [Thread-21] MyJobHandler:hellloooooooooo-0 0 20 19 8 ? 2019
    [INFO ] 2019-08-19 20:00:00.275 [Thread-21] MyJobHandler:hellloooooooooo-0 0 20 19 8 ? 2019
    

    Steps to reproduce the behavior

    任务设置如图 image

    Other information

    opened by meteorxht 12
  • 时区支持

    时区支持

    目前版本 XXL_JOB 并不支持时区选择,如果是跨地区服务时使用起来会比较难受(甚至每个地区要部署一套)。

    基于 2.1.1-SNAPSHOT 版本我们定制了多时区功能,只需要部署一套环境便可支持 N 个时区;经过一段时间线上运行已经趋于稳定。

    如果社区需要,可以将这部分功能移植过来。

    image

    # 时区配置
    tz.value=[{"name":"Australia/Sydney","zhName":"堪培拉,墨尔本,悉尼(UTC+10:00)"},{"name":"Asia/Shanghai","zhName":"北京,重庆,香港特别行政区,乌鲁木齐(UTC+08:00)"},{"name":"Asia/Tokyo","zhName":"大阪,札幌,东京(UTC+09:00)"}]
    
    opened by crossoverJie 11
  • job-admin 2.0.1 能直接升级到 2.0.2 吗?

    job-admin 2.0.1 能直接升级到 2.0.2 吗?

    我尝试从 2.0.1 升级到 2.0.2。 发现数据库结构基本一致,只是 XXL_JOB_QRTZ_TRIGGER_LOG 表 多了 一个 alarm_status 字段。增加该字段后 job-admin 启动正常。

    但运行时发现了一个非常严重的问题: 1、原有JOB会显示为STOP,但通过日志看一直都在执行并未停止。 2、如果点击“启动”,JOB状态会显示为RUNNING,但通过日志看是重复执行了2次。 image

    image image

    opened by ldcsaa 11
  • 动态添加任务?

    动态添加任务?

    Please answer some questions before submitting your issue. Thanks! 我想要一个可以动态添加定时任务的功能。比如,在商城系统中,一个人下单之后,就要触发一个定时任务,30分钟之后去检查这个订单是否支付,如果没有支付就取消订单这种动作,就是每个任务的定时都不固定,这里面有这个功能吗?

    Which version of XXL-JOB do you using?

    1.9.0

    Expected behavior

    动态添加任务

    Actual behavior

    Steps to reproduce the behavior

    Other information

    opened by lengrongfu 11
  • 任务使用线程池打印日志bug

    任务使用线程池打印日志bug

    Please answer some questions before submitting your issue. Thanks!

    Which version of XXL-JOB do you using?

    2.1.1-SNAPSHOT

    Expected behavior

    每次任务日志都打印到对应日志文件

    Actual behavior

    之后线程池中线程打印的日志只会打印到第一次的日志文件

    Steps to reproduce the behavior

    运行任务,在任务重使用线程池运行,重复运行即可复现

    Other information

    修改方案:将 XxlJobFileAppender中的InheritableThreadLocal 修改成ali的TransmittableThreadLocal即可,然后运行加上javaagent -javaagent:/apps/jars/transmittable-thread-local-2.11.2.jar

    我理解使用InheritableThreadLocal 应该就是考虑到会在任务中使用线程,而目前 来说,基本规范都是使用线程池来完成,也就意味着这个设置会失效。

    opened by losemy 10
  • 点击任务选项,查询任务下日志列表,在mac中safari浏览器不兼容问题修复

    点击任务选项,查询任务下日志列表,在mac中safari浏览器不兼容问题修复

    对于safiri 浏览器没有作用。需要将attr替换成prop。

    What kind of change does this PR introduce? (check at least one)

    • [x] Bugfix
    • [ ] Feature
    • [ ] Code style update
    • [ ] Refactor
    • [ ] Build-related changes
    • [ ] Other, please describe:

    The description of the PR:

    Other information:

    opened by suntj-tea 1
  • change Exception to throwable for some jvm issue

    change Exception to throwable for some jvm issue

    change Exception to throwable for some jvm issue

    What kind of change does this PR introduce? (check at least one)

    • [ ] Bugfix
    • [ ] Feature
    • [ ] Code style update
    • [ ] Refactor
    • [ ] Build-related changes
    • [ ] Other, please describe:

    The description of the PR:

    Other information:

    opened by zhuyou1234 0
  • 接入nacos&新增指定Ip路由策略

    接入nacos&新增指定Ip路由策略

    1、接入nacos 2、新增指定IP路由策略 3、升级springboot版本

    • [ ] Bugfix
    • [ ] Feature
    • [ ] Code style update
    • [ ] Refactor
    • [ ] Build-related changes
    • [ ] Other, please describe:

    The description of the PR:

    Other information:

    opened by happyInThis 0
  • 这个项目到底还维护不维护了?

    这个项目到底还维护不维护了?

    Please answer some questions before submitting your issue. Thanks!

    Which version of XXL-JOB do you using?

    Expected behavior

    Actual behavior

    Steps to reproduce the behavior

    Other information

    opened by JavaLionLi 5
  • 每隔两天,执行器会断开,但是执行器依旧活着

    每隔两天,执行器会断开,但是执行器依旧活着

    ERROR org.xnio.listener - XNIO001007: A channel event listener threw an exception java.nio.channels.ClosedSelectorException: null at java.base/sun.nio.ch.SelectorImpl.ensureOpen(SelectorImpl.java:80) at java.base/sun.nio.ch.SelectorImpl.implRegister(SelectorImpl.java:239) at java.base/sun.nio.ch.SelectorImpl.register(SelectorImpl.java:215) at java.base/java.nio.channels.spi.AbstractSelectableChannel.register(AbstractSelectableChannel.java:236) at java.base/java.nio.channels.SelectableChannel.register(SelectableChannel.java:260) at org.xnio.nio.WorkerThread.registerChannel(WorkerThread.java:731) at org.xnio.nio.NioTcpServer.accept(NioTcpServer.java:421) at org.xnio.nio.QueuedNioTcpServer2.handleReady(QueuedNioTcpServer2.java:149) at org.xnio.nio.QueuedNioTcpServer2.lambda$new$1(QueuedNioTcpServer2.java:58) at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92) at org.xnio.nio.NioTcpServerHandle.handleReady(NioTcpServerHandle.java:65) at org.xnio.nio.WorkerThread.run(WorkerThread.java:591) 执行器最后报错为这一段,重复报错

    opened by nanoixx 0
Releases(2.3.1)
  • 2.3.1(May 21, 2022)

    • 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)。
    Source code(tar.gz)
    Source code(zip)
  • 2.3.0(Feb 9, 2021)

    Release Notes

    • 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、【修复】执行器日志清理优化,修复小概率下日志文件为空导致清理异常问题;
    Source code(tar.gz)
    Source code(zip)
  • v2.2.0(Apr 14, 2020)

    Release Notes

    • 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” ,升级时该组件时需要注意;

    Source code(tar.gz)
    Source code(zip)
  • 2.1.2(Dec 12, 2019)

    Release Notes

    • 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方法;
    Source code(tar.gz)
    Source code(zip)
  • 2.1.1(Nov 24, 2019)

    Release Notes

    • 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等等;
    Source code(tar.gz)
    Source code(zip)
  • 2.1.0(Jul 6, 2019)

    Release Notes

    • 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,避免因不同版本实现不同导致的兼容性问题;
    Source code(tar.gz)
    Source code(zip)
  • 2.0.2(Apr 20, 2019)

    Release Notes

    • 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版本兼容性问题;
    Source code(tar.gz)
    Source code(zip)
  • v2.0.1(Nov 9, 2018)

    Release Notes

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

    Release Notes

    • 1、调度中心迁移到 springboot;
    • 2、底层通讯组件迁移至 xxl-rpc;
    • 3、提供官方docker镜像,并推送至中央仓库(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、子任务失败重试重试逻辑优化,子任务失败时将会按照其预设的失败重试次数主动进行重试
    Source code(tar.gz)
    Source code(zip)
  • v1.9.2(Oct 5, 2018)

    版本 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镜像;
    Source code(tar.gz)
    Source code(zip)
  • v1.9.1(Feb 22, 2018)

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

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

    版本 v1.9.0 特性

    • 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")日志保存天数,日志文件过期自动删除。
    Source code(tar.gz)
    Source code(zip)
  • v1.8.2(Sep 4, 2017)

    版本 V1.8.2 特性

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

    版本 V1.8.1 特性

    • 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依赖版本管理;
    Source code(tar.gz)
    Source code(zip)
  • v1.8.0(Jul 17, 2017)

    版本 V1.8.0 特性

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

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

    Source code(tar.gz)
    Source code(zip)
  • v1.7.1(May 8, 2017)

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

    Source code(tar.gz)
    Source code(zip)
  • v1.7.0(May 2, 2017)

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

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

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

    Source code(tar.gz)
    Source code(zip)
  • v1.6.0(Mar 13, 2017)

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

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

    Source code(tar.gz)
    Source code(zip)
  • v1.5.1(Nov 26, 2016)

    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中央仓库;

    Source code(tar.gz)
    Source code(zip)
  • v1.5.0(Nov 13, 2016)

    版本 V1.5.0 特性

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

    Source code(tar.gz)
    Source code(zip)
  • v1.4.2(Sep 29, 2016)

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

    Source code(tar.gz)
    Source code(zip)
  • v1.4.0(Jul 25, 2016)

    • 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分支持续更新。

    Source code(tar.gz)
    Source code(zip)
  • v1.3.2(May 28, 2016)

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

    Source code(tar.gz)
    Source code(zip)
  • v1.3.1(May 23, 2016)

    1、更新项目目录结构: /xxl-job-admin -------------------- 【调度中心】:负责管理调度信息,按照调度配置发出调度请求; /xxl-job-core ----------------------- 公共依赖 /xxl-job-executor-example ------ 【执行器】:负责接收调度请求并执行任务逻辑; /db ---------------------------------- 建表脚本 /doc --------------------------------- 用户手册

    2、在新的目录结构上,升级了用户手册; 3、优化了一些交互和UI;

    Source code(tar.gz)
    Source code(zip)
  • v1.3.0(May 20, 2016)

    1、遗弃“本地任务”模式,推荐使用“远程任务”,易于系统解耦,任务对应的JobHander统称为“执行器”; 2、遗弃“servlet”方式底层系统通讯,推荐使用JETTY方式,重构通讯逻辑; 3、UI交互优化:左侧菜单展开状态优化,菜单项选中状态优化,任务列表打开表格有压缩优化; 4、【重要】“执行器”细分为:BEAN、GLUE两种开发模式,简介见下文:

    “执行器” 模式简介:
        BEAN模式执行器:每个执行器都是Spring的一个Bean实例,XXL-JOB通过注解@JobHander识别和调度执行器;
        GLUE模式执行器:每个执行器对应一段代码,在线Web编辑和维护,动态编译生效,执行器负责加载GLUE代码和执行;
    
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Jan 16, 2016)

    新版本 V1.2.x,新特性 1、支持任务分组; 2、支持“本地任务”、“远程任务”; 3、支持“任务日志”; 4、支持“串行执行”,并行执行;

    说明:V1.2版本将系统架构按功能拆分为: 调度模块[xxl-job-admin]:负责管理调度信息,按照调度配置发出调度请求; 任务模块[xxl-job-client-demo]:负责接收调度请求并执行任务逻辑;任务模块可以方便的嵌入web项目,可以参考此demo; 通讯模块[xxl-job-client]:负责调度模块和任务模块之间的信息通讯; 优点: 解耦:任务模块提供任务接口,调度模块维护调度信息,业务相互独立; 高扩展性; 稳定性;

    Source code(tar.gz)
    Source code(zip)
ClockMonster is a self-hosted service for scheduling one-time or repeating jobs within your system

ClockMonster ClockMonster is a self-hosted service for scheduling one-time or repeating jobs within your system. Jobs for now are HTTP POST requests,

Scott Hiett 17 Dec 15, 2022
Distributed scheduled job framework

ElasticJob - distributed scheduled job solution Official website: https://shardingsphere.apache.org/elasticjob/ ElasticJob is a distributed scheduling

The Apache Software Foundation 7.8k Jan 5, 2023
Distributed lock for your scheduled tasks

ShedLock ShedLock makes sure that your scheduled tasks are executed at most once at the same time. If a task is being executed on one node, it acquire

Lukáš Křečan 2.8k Jan 7, 2023
The simple, stupid batch framework for Java

Easy Batch The simple, stupid batch framework for Java™ Project status As of November 18, 2020, Easy Batch is in maintenance mode. This means only bug

Jeasy 571 Dec 29, 2022
Java Constraint Solver to solve vehicle routing, employee rostering, task assignment, conference scheduling and other planning problems.

OptaPlanner www.optaplanner.org Looking for Quickstarts? OptaPlanner’s quickstarts have moved to optaplanner-quickstarts repository. Quick development

KIE (Drools, OptaPlanner and jBPM) 2.8k Jan 2, 2023
Implementation of Greedy Particle Swarm Optimization, HSGA and Hybrid(GA+PSO) for the purpose of Task Scheduling in cloud computing environment using CloudSim

Implementation of Greedy Particle Swarm Optimization, HSGA and Hybrid(GA+PSO) for the purpose of Task Scheduling in cloud computing environment using CloudSim

Yash Jain 5 Dec 18, 2022
A Light-weight Job Scheduling Framework

Sundial A Lightweight Job Scheduling Framework for Java. In a Nutshell Sundial makes adding scheduled jobs to your Java application a walk in the park

Knowm 262 Dec 9, 2022
A Light-weight Job Scheduling Framework

Sundial A Lightweight Job Scheduling Framework for Java. In a Nutshell Sundial makes adding scheduled jobs to your Java application a walk in the park

Knowm 262 Dec 9, 2022
Rqueue aka Redis Queue [Task Queue, Message Broker] for Spring framework

Rqueue: Redis Queue, Task Queue, Scheduled Queue for Spring and Spring Boot Rqueue is an asynchronous task executor(worker) built for spring and sprin

Sonu Kumar 221 Jan 5, 2023
Lightweight threads for Java, with message passing, nio, http and scheduling support.

Kilim: Continuations, Fibers, Actors and message passing for the JVM

Sriram Srinivasan 1.7k Jan 3, 2023
This open source project allows you to easily integrate Camunda's External Task Clients into Micronaut projects: simply add a dependency in your Micronaut project

micronaut-camunda-external-client This open source project allows you to easily integrate Camunda 's External Task Clients into Micronaut projects. Mi

Novatec Consulting GmbH 19 Dec 18, 2022
In this task, we had to write a MapReduce program to analyze the sentiment of a keyword from a list of comments. This was done using Hadoop HDFS.

All the files have been commented for your ease. Furthermore you may also add further comments if you may. For further queries contact me at : chhxnsh

Hassan Shahzad 5 Aug 14, 2021
Spotless-intellij-gradle - An IntelliJ plugin to allow running the Spotless gradle task from within the IDE.

Spotless Intellij Gradle An IntelliJ plugin to allow running the spotless gradle task from within the IDE on the current file selected in the editor.

Ryan Gurney 30 Dec 17, 2022
A suite of software tools and services created to support activity planning and sequencing needs of missions with modeling, simulation, scheduling and validation capabilities

Aerie A suite of software tools and services created to support activity planning and sequencing needs of missions with modeling, simulation, scheduli

NASA Advanced Multi-Mission Operations System 31 Jan 3, 2023
ClockMonster is a self-hosted service for scheduling one-time or repeating jobs within your system

ClockMonster ClockMonster is a self-hosted service for scheduling one-time or repeating jobs within your system. Jobs for now are HTTP POST requests,

Scott Hiett 17 Dec 15, 2022
Task tracker application

TaskManager Three-level project architecture (data layer, domain layer, representation layer) with an additional layer linking the representation laye

Yaroslav Novichkov 1 Feb 4, 2022
Critter Chronologer a Software as a Service application that provides a scheduling interface for a small business that takes care of animals

Critter Chronologer a Software as a Service application that provides a scheduling interface for a small business that takes care of animals. This Spring Boot project will allow users to create pets, owners, and employees, and then schedule events for employees to provide services for pets.

Rasha Omran 1 Jan 28, 2022
My task for " The Sparks Foundation

MyBank This is a Sparks Foundation GRIP (Graduate Rotational Internship Program) Technology Task. Task 2: Basic Banking App ◇ Create a simple mobile a

Sanjeev 1 Oct 19, 2021
Tasks Planner : A minimalist collaborative app for scheduling and managing your tasks with the team and getting notifications through discord.

Tasks Planner ✨ Overview Tasks planner is a minimalist collaborative app for planning and managing your tasks with the team and get notifications thro

MILIARI Adnane 7 Dec 1, 2022