Pre Merge pull request !12 from xxssyyyyssxx/master

pull/12/MERGE
Gitee 6 years ago
commit 633fe217c4

@ -117,32 +117,32 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
至今XXL-JOB已接入多家公司的线上产品线接入场景如电商业务O2O业务和大数据作业等截止最新统计时间为止XXL-JOB已接入的公司包括不限于
- 1、大众点评
- 1、大众点评【美团点评】
- 2、山东学而网络科技有限公司
- 3、安徽慧通互联科技有限公司
- 4、人人聚财金服
- 5、上海棠棣信息科技股份有限公司
- 6、运满满
- 7、米其林 (中国区)
- 6、运满满【运满满】
- 7、米其林 (中国区)【米其林】
- 8、妈妈联盟
- 9、九樱天下北京信息技术有限公司
- 10、万普拉斯科技有限公司(一加手机)
- 10、万普拉斯科技有限公司【一加手机】
- 11、上海亿保健康管理有限公司
- 12、海尔馨厨 (海尔)
- 12、海尔馨厨【海尔】
- 13、河南大红包电子商务有限公司
- 14、成都顺点科技有限公司
- 15、深圳市怡亚通
- 16、深圳麦亚信科技股份有限公司
- 17、上海博莹科技信息技术有限公司
- 18、中国平安科技有限公司
- 18、中国平安科技有限公司【中国平安】
- 19、杭州知时信息科技有限公司
- 20、博莹科技上海有限公司
- 21、成都依能股份有限责任公司
- 22、湖南高阳通联信息技术有限公司
- 23、深圳市邦德文化发展有限公司
- 24、福建阿思可网络教育有限公司
- 25、优信二手车
- 26、上海悠游堂投资发展股份有限公司
- 25、优信二手车【优信】
- 26、上海悠游堂投资发展股份有限公司【悠游堂】
- 27、北京粉笔蓝天科技有限公司
- 28、中秀科技(无锡)有限公司
- 29、武汉空心科技有限公司
@ -150,7 +150,7 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 31、四川互宜达科技有限公司
- 32、钱包行云北京科技有限公司
- 33、重庆欣才集团
- 34、咪咕互动娱乐有限公司(中国移动)
- 34、咪咕互动娱乐有限公司【中国移动】
- 35、北京诺亦腾科技有限公司
- 36、增长引擎(北京)信息技术有限公司
- 37、北京英贝思科技有限公司
@ -163,7 +163,7 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 44、圳临界线网络科技有限公司
- 45、广州知识圈网络科技有限公司
- 46、国誉商业上海有限公司
- 47、海尔消费金融有限公司嗨付、够花 (海尔)
- 47、海尔消费金融有限公司嗨付、够花【海尔】
- 48、广州巴图鲁信息科技有限公司
- 49、深圳市鹏海运电子数据交换有限公司
- 50、深圳市亚飞电子商务有限公司
@ -174,7 +174,7 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 55、中商惠民(北京)电子商务有限公司
- 56、凯京集团
- 57、华夏票联北京科技有限公司
- 58、拍拍贷
- 58、拍拍贷【拍拍贷】
- 59、北京尚德机构在线教育有限公司
- 60、任子行股份有限公司
- 61、北京时态电子商务有限公司
@ -200,22 +200,22 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 81、深圳小安时代互联网金融服务有限公司
- 82、湖北享七网络科技有限公司
- 83、钱包行云(北京)科技有限公司
- 84、360金融 (360)
- 84、360金融【360】
- 85、易企秀
- 86、摩贝上海生物科技有限公司
- 87、广东芯智慧科技有限公司
- 88、联想集团 (联想)
- 88、联想集团【联想】
- 89、怪兽充电
- 90、行圆汽车
- 91、深圳店店通科技邮箱公司
- 92、京东 (京东)
- 92、京东【京东】
- 93、米庄理财
- 94、咖啡易融
- 95、梧桐诚选
- 96、恒大地产 (恒大)
- 96、恒大地产【恒大】
- 97、昆明龙慧
- 98、上海涩瑶软件
- 99、易信 (网易)
- 99、易信【网易】
- 100、铜板街
- 101、杭州云若网络科技有限公司
- 102、特百惠中国有限公司
@ -241,17 +241,17 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 122、多粉平台
- 123、铁甲二手机
- 124、上海海新得数据技术有限公司
- 125、深圳市珍爱网信息技术有限公司 (珍爱网)
- 125、深圳市珍爱网信息技术有限公司【珍爱网】
- 126、小蜜蜂
- 127、吉荣数科技
- 128、上海恺域信息科技有限公司
- 129、广州荔支网络有限公司(荔枝FM)
- 129、广州荔支网络有限公司【荔枝FM】
- 130、杭州闪宝科技有限公司
- 131、北京互联新网科技发展有限公司
- 132、誉道科技
- 133、山西兆盛房地产开发有限公司
- 134、北京蓝睿通达科技有限公司
- 135、月亮小屋中国有限公司(蓝月亮)
- 135、月亮小屋中国有限公司【蓝月亮】
- 136、青岛国瑞信息技术有限公司
- 137、博雅云计算北京有限公司
- 138、华泰证券香港子公司
@ -259,7 +259,7 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 140、武汉博晟安全技术股份有限公司
- 141、深圳市六度人和科技有限公司
- 142、杭州趣维科技有限公司小影
- 143、宁波单车侠之家科技有限公司(单车侠)
- 143、宁波单车侠之家科技有限公司【单车侠】
- 144、丁丁云康信息科技北京有限公司
- 145、云钱袋
- 146、南京中兴力维
@ -268,8 +268,8 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 149、中通服创立科技有限责任公司
- 150、深圳市对庄科技有限公司
- 151、上证所信息网络有限公司
- 152、杭州火烧云科技有限公司(婚礼纪)
- 153、天津青芒果科技有限公司 (芒果头条)
- 152、杭州火烧云科技有限公司【婚礼纪】
- 153、天津青芒果科技有限公司【芒果头条】
- 154、长飞光纤光缆股份有限公司
- 155、世纪凯歌北京医疗科技有限公司
- 156、浙江霖梓控股有限公司
@ -281,7 +281,7 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 162、大志天成
- 163、上海云鹊医
- 164、上海云鹊医
- 165、墨迹天气(墨迹天气)
- 165、墨迹天气【墨迹天气】
- 166、上海逸橙信息科技有限公司
- 167、沅朋物联
- 168、杭州恒生云融网络科技有限公司
@ -297,16 +297,16 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 178、厦门神州鹰软件科技有限公司
- 179、深圳市招商信诺人寿保险有限公司
- 180、上海好屋网信息技术有限公司
- 181、海信集团
- 181、海信集团【海信】
- 182、信凌可信息科技上海有限公司
- 183、长春天成科技发展有限公司
- 184、用友金融信息技术股份有限公司(用友)
- 184、用友金融信息技术股份有限公司【用友】
- 185、北京咖啡易融有限公司
- 186、国投瑞银基金管理有限公司
- 187、晋松(上海)网络信息技术有限公司
- 188、深圳市随手科技有限公司(随手记)
- 188、深圳市随手科技有限公司【随手记】
- 189、深圳水务科技有限公司
- 190、易企秀
- 190、易企秀【易企秀】
- 191、北京磁云科技
- 192、南京蜂泰互联网科技有限公司
- 193、章鱼直播
@ -329,9 +329,22 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 210、普联软件股份有限公司
- 211、北京科蓝软件股份有限公司
- 212、江苏斯诺物联科技有限公司
- 213、北京搜狐-狐友(搜狐)
- 213、北京搜狐-狐友【搜狐】
- 214、新大陆网商金融
- 215、山东神码中税信息科技有限公司
- 216、河南汇顺网络科技有限公司
- 217、北京华夏思源科技发展有限公司
- 218、上海东普信息科技有限公司
- 219、上海鸣勃网络科技有限公司
- 220、广东学苑教育发展有限公司
- 221、深圳强时科技有限公司
- 222、上海云砺信息科技有限公司
- 223、重庆愉客行网络有限公司
- 224、数云
- 225、国家电网运检部
- 226、杭州找趣
- 227、浩鲸云计算科技股份有限公司
- 228、科大讯飞【科大讯飞】
- ……
> 更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。

@ -85,32 +85,32 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
至今XXL-JOB已接入多家公司的线上产品线接入场景如电商业务O2O业务和大数据作业等截止最新统计时间为止XXL-JOB已接入的公司包括不限于
- 1、大众点评
- 1、大众点评【美团点评】
- 2、山东学而网络科技有限公司
- 3、安徽慧通互联科技有限公司
- 4、人人聚财金服
- 5、上海棠棣信息科技股份有限公司
- 6、运满满
- 7、米其林 (中国区)
- 6、运满满【运满满】
- 7、米其林 (中国区)【米其林】
- 8、妈妈联盟
- 9、九樱天下北京信息技术有限公司
- 10、万普拉斯科技有限公司(一加手机)
- 10、万普拉斯科技有限公司【一加手机】
- 11、上海亿保健康管理有限公司
- 12、海尔馨厨 (海尔)
- 12、海尔馨厨【海尔】
- 13、河南大红包电子商务有限公司
- 14、成都顺点科技有限公司
- 15、深圳市怡亚通
- 16、深圳麦亚信科技股份有限公司
- 17、上海博莹科技信息技术有限公司
- 18、中国平安科技有限公司
- 18、中国平安科技有限公司【中国平安】
- 19、杭州知时信息科技有限公司
- 20、博莹科技上海有限公司
- 21、成都依能股份有限责任公司
- 22、湖南高阳通联信息技术有限公司
- 23、深圳市邦德文化发展有限公司
- 24、福建阿思可网络教育有限公司
- 25、优信二手车
- 26、上海悠游堂投资发展股份有限公司
- 25、优信二手车【优信】
- 26、上海悠游堂投资发展股份有限公司【悠游堂】
- 27、北京粉笔蓝天科技有限公司
- 28、中秀科技(无锡)有限公司
- 29、武汉空心科技有限公司
@ -118,7 +118,7 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 31、四川互宜达科技有限公司
- 32、钱包行云北京科技有限公司
- 33、重庆欣才集团
- 34、咪咕互动娱乐有限公司(中国移动)
- 34、咪咕互动娱乐有限公司【中国移动】
- 35、北京诺亦腾科技有限公司
- 36、增长引擎(北京)信息技术有限公司
- 37、北京英贝思科技有限公司
@ -131,7 +131,7 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 44、圳临界线网络科技有限公司
- 45、广州知识圈网络科技有限公司
- 46、国誉商业上海有限公司
- 47、海尔消费金融有限公司嗨付、够花 (海尔)
- 47、海尔消费金融有限公司嗨付、够花【海尔】
- 48、广州巴图鲁信息科技有限公司
- 49、深圳市鹏海运电子数据交换有限公司
- 50、深圳市亚飞电子商务有限公司
@ -142,7 +142,7 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 55、中商惠民(北京)电子商务有限公司
- 56、凯京集团
- 57、华夏票联北京科技有限公司
- 58、拍拍贷
- 58、拍拍贷【拍拍贷】
- 59、北京尚德机构在线教育有限公司
- 60、任子行股份有限公司
- 61、北京时态电子商务有限公司
@ -168,22 +168,22 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 81、深圳小安时代互联网金融服务有限公司
- 82、湖北享七网络科技有限公司
- 83、钱包行云(北京)科技有限公司
- 84、360金融 (360)
- 84、360金融【360】
- 85、易企秀
- 86、摩贝上海生物科技有限公司
- 87、广东芯智慧科技有限公司
- 88、联想集团 (联想)
- 88、联想集团【联想】
- 89、怪兽充电
- 90、行圆汽车
- 91、深圳店店通科技邮箱公司
- 92、京东 (京东)
- 92、京东【京东】
- 93、米庄理财
- 94、咖啡易融
- 95、梧桐诚选
- 96、恒大地产 (恒大)
- 96、恒大地产【恒大】
- 97、昆明龙慧
- 98、上海涩瑶软件
- 99、易信 (网易)
- 99、易信【网易】
- 100、铜板街
- 101、杭州云若网络科技有限公司
- 102、特百惠中国有限公司
@ -209,17 +209,17 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 122、多粉平台
- 123、铁甲二手机
- 124、上海海新得数据技术有限公司
- 125、深圳市珍爱网信息技术有限公司 (珍爱网)
- 125、深圳市珍爱网信息技术有限公司【珍爱网】
- 126、小蜜蜂
- 127、吉荣数科技
- 128、上海恺域信息科技有限公司
- 129、广州荔支网络有限公司(荔枝FM)
- 129、广州荔支网络有限公司【荔枝FM】
- 130、杭州闪宝科技有限公司
- 131、北京互联新网科技发展有限公司
- 132、誉道科技
- 133、山西兆盛房地产开发有限公司
- 134、北京蓝睿通达科技有限公司
- 135、月亮小屋中国有限公司(蓝月亮)
- 135、月亮小屋中国有限公司【蓝月亮】
- 136、青岛国瑞信息技术有限公司
- 137、博雅云计算北京有限公司
- 138、华泰证券香港子公司
@ -227,7 +227,7 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 140、武汉博晟安全技术股份有限公司
- 141、深圳市六度人和科技有限公司
- 142、杭州趣维科技有限公司小影
- 143、宁波单车侠之家科技有限公司(单车侠)
- 143、宁波单车侠之家科技有限公司【单车侠】
- 144、丁丁云康信息科技北京有限公司
- 145、云钱袋
- 146、南京中兴力维
@ -236,8 +236,8 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 149、中通服创立科技有限责任公司
- 150、深圳市对庄科技有限公司
- 151、上证所信息网络有限公司
- 152、杭州火烧云科技有限公司(婚礼纪)
- 153、天津青芒果科技有限公司 (芒果头条)
- 152、杭州火烧云科技有限公司【婚礼纪】
- 153、天津青芒果科技有限公司【芒果头条】
- 154、长飞光纤光缆股份有限公司
- 155、世纪凯歌北京医疗科技有限公司
- 156、浙江霖梓控股有限公司
@ -249,7 +249,7 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 162、大志天成
- 163、上海云鹊医
- 164、上海云鹊医
- 165、墨迹天气(墨迹天气)
- 165、墨迹天气【墨迹天气】
- 166、上海逸橙信息科技有限公司
- 167、沅朋物联
- 168、杭州恒生云融网络科技有限公司
@ -265,16 +265,16 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 178、厦门神州鹰软件科技有限公司
- 179、深圳市招商信诺人寿保险有限公司
- 180、上海好屋网信息技术有限公司
- 181、海信集团
- 181、海信集团【海信】
- 182、信凌可信息科技上海有限公司
- 183、长春天成科技发展有限公司
- 184、用友金融信息技术股份有限公司(用友)
- 184、用友金融信息技术股份有限公司【用友】
- 185、北京咖啡易融有限公司
- 186、国投瑞银基金管理有限公司
- 187、晋松(上海)网络信息技术有限公司
- 188、深圳市随手科技有限公司(随手记)
- 188、深圳市随手科技有限公司【随手记】
- 189、深圳水务科技有限公司
- 190、易企秀
- 190、易企秀【易企秀】
- 191、北京磁云科技
- 192、南京蜂泰互联网科技有限公司
- 193、章鱼直播
@ -297,9 +297,22 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
- 210、普联软件股份有限公司
- 211、北京科蓝软件股份有限公司
- 212、江苏斯诺物联科技有限公司
- 213、北京搜狐-狐友(搜狐)
- 213、北京搜狐-狐友【搜狐】
- 214、新大陆网商金融
- 215、山东神码中税信息科技有限公司
- 216、河南汇顺网络科技有限公司
- 217、北京华夏思源科技发展有限公司
- 218、上海东普信息科技有限公司
- 219、上海鸣勃网络科技有限公司
- 220、广东学苑教育发展有限公司
- 221、深圳强时科技有限公司
- 222、上海云砺信息科技有限公司
- 223、重庆愉客行网络有限公司
- 224、数云
- 225、国家电网运检部
- 226、杭州找趣
- 227、浩鲸云计算科技股份有限公司
- 228、科大讯飞【科大讯飞】
- ……
> 更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。
@ -343,7 +356,7 @@ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是
## 二、快速入门
### 2.1 初始化“调度数据库”
请下载项目源码并解压,获取 "调度数据库初始化SQL脚本" 并执行即可正常情况下应该生成16张表
请下载项目源码并解压,获取 "调度数据库初始化SQL脚本" 并执行即可。
"调度数据库初始化SQL脚本" 位置为:
@ -1509,20 +1522,18 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
### 6.26 版本 v2.1.1 Release Notes[规划中]
- 1、[ING]调度日志优化:支持设置日志保留天数,过期日志天维度记录报表,并清理;调度报表汇总实时数据和报表;
- 2、[ING]父子任务参数传递;
- 3、[ING]调度中心JDK版本调整为JDK8从而升级至最新版本SpringBoot
- 4、[ING]执行器端口复用,复用容器端口提供通讯服务;
- 5、[ING]执行器服务端口与注册端口分离支持docker动态随机端口
- 6、登录界面取消默认填写的登录账号密码
- 7、[ING]cron在线生成工具
- 8、[ING]任务、执行器数据全量本地缓存;新增消息表广播通知;
- 9、任务触发组件优化预加载频率正常1s一次当预加载轮空时主动休眠一个加载周期动态降低加载频率从而降低DB压力
- 10、注册监控线程优化降低死锁几率
- 11、调度组件优化针对永远不会触发的Cron禁止配置和启动任务Cron最后一次触发后再也不会触发时比如一次性任务主动停止相关任务
- 12、任务列表交互优化支持查看任务所属执行器的注册节点
- 13、UI优化任务列表和日志列表数据表格宽度比例调整避免数据换行提升体验
- 14、执行器表属性调整"顺序" 属性调整为整型,解决执行器数据较多时无法正确排序的问题;
- 1、UI优化任务列表和日志列表数据表格宽度比例调整避免数据换行提升体验
- 2、登录界面取消默认填写的登录账号密码
- 3、执行器表属性调整"顺序" 属性调整为整型,解决执行器数据较多时无法正确排序的问题;
- 4、任务触发组件优化预加载频率正常1s一次当预加载轮空时主动休眠一个加载周期动态降低加载频率从而降低DB压力
- 5、注册监控线程优化降低死锁几率
- 6、调度组件优化针对永远不会触发的Cron禁止配置和启动任务Cron最后一次触发后再也不会触发时比如一次性任务主动停止相关任务
- 7、任务列表交互优化支持查看任务所属执行器的注册节点
- 8、DB重连优化修复DB宕机重连后任务调度停止的问题重连后自动加入调度集群触发任务调度
- 9、任务触发组件加载顺序调整避免小概率情况下组件随机加载顺序导致的I18N的NPE问题。
- 10、[ING]Cron在线生成工具
- 11、[ING]调度日志优化:支持设置日志保留天数,过期日志天维度记录报表,并清理;调度报表汇总实时数据和报表;
- 12、[ING]父子任务参数传递;流程任务等,透传动态参数;
### TODO LIST
@ -1531,32 +1542,29 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
- 3、调度任务优先级
- 4、多数据库支持在重写并移除Quartz的基础上DAO层通过JPA实现不限制数据库类型
- 5、执行器Log清理功能调度中心Log删除时同步删除执行器中的Log文件
- 6、Bean模式任务JobHandler自动从执行器中查询展示为下拉框选择后自动填充任务名称等属性
- 6、任务自动注册:Bean模式任务JobHandler自动从执行器中查询展示为下拉框选择后自动填充任务名称等属性待考虑,因为任务自动注册将会导致任务难以管理控制;
- 7、API事件触发类型任务更类似MQ消息支持"动态传参、延时消费"该类型任务不走调度组件单独建立MQ消息表调度中心竞争触发待定该功能与 XXL-MQ 冲突,该场景建议用后者;
- 8、调度线程池改为协程方式实现大幅降低系统内存消耗
- 9、执行器端口复用http通讯自动添加相对地址 "/xxl-job"
- 10、流程任务支持参数传递
- 11、Cron TimeZone 自定义;
- 12、忙碌转移优化全部机器忙碌时不再直接失败
- 13、流程任务等透传动态参数
- 14、任务自动注册待考虑因为任务自动注册将会导致任务难以管理控制
- 15、失败重试间隔
- 16、任务权限管理执行器为粒度分配权限核心操作校验权限
- 17、SimpleTrigger 支持;
- 18、除Cron外支持设置固定时间间隔触发
- 19、调度日志列表加上执行时长列并支持排序
- 20、dag任务替换子任务配置并列的"a-b、b-c"路径列表构成串行、并行、dag任务流程"dagre-d3"绘图;任务依赖,流程图,子任务+会签任务,各节点日志;
- 21、排程任务支持时间短、时间点配置支持配置多个精确到秒实现有效期等功能
- 22、告警邮件内容支持自定义模板配置
- 23、暂停状态支持Cron 为空;
- 24、新增任务运行模式 "GLUE模式(GO) "支持GO任务
- 25、注册中心优化实时性注册发现心跳注册间隔10srefresh失败则首次注册并立即更新注册信息心跳类似30s过期销毁
- 26、提供执行器Docker镜像
- 27、脚本任务支持数据参数新版本仅支持单参数不支持需要兼容
- 28、GLUE 模式 Web Ide 版本对比功能;
- 29、批量调度调度请求入queue调度线程批量获取调度请求并发起远程调度提高线程效率
- 30、多语言执行器约定跨语言通讯方案以及通讯接口
- 31、移除commons-exec采用原生实现
- 9、任务、执行器数据全量本地缓存新增消息表广播通知
- 10、忙碌转移优化全部机器忙碌时不再直接失败
- 11、失败重试间隔
- 12、SimpleTrigger除Cron外支持设置固定时间间隔触发
- 13、调度日志列表加上执行时长列并支持排序
- 14、DAG流程任务替换子任务支持参数传递配置并列的"a-b、b-c"路径列表构成串行、并行、dag任务流程"dagre-d3"绘图;任务依赖,流程图,子任务+会签任务,各节点日志;
- 15、日期过滤支持多个时间段排除
- 16、告警邮件内容支持自定义模板配置
- 17、暂停状态支持Cron 为空;
- 18、新增任务运行模式 "GLUE模式(GO) "支持GO任务
- 19、注册中心优化实时性注册发现心跳注册间隔10srefresh失败则首次注册并立即更新注册信息心跳类似30s过期销毁
- 20、提供执行器Docker镜像
- 21、脚本任务支持数据参数新版本仅支持单参数不支持需要兼容
- 22、GLUE 模式 Web Ide 版本对比功能;
- 23、批量调度调度请求入queue调度线程批量获取调度请求并发起远程调度提高线程效率
- 24、多语言执行器约定跨语言通讯方案以及通讯接口
- 25、移除commons-exec采用原生实现
- 26、调度中心JDK版本调整为JDK8从而升级至最新版本SpringBoot
- 27、执行器服务端口与注册端口分离支持docker动态随机端口
- 28、执行器端口复用复用容器端口提供通讯服务
## 七、其他

@ -39,7 +39,7 @@
<groovy.version>2.5.7</groovy.version>
<maven-source-plugin.version>3.1.0</maven-source-plugin.version>
<maven-javadoc-plugin.version>3.1.0</maven-javadoc-plugin.version>
<maven-javadoc-plugin.version>3.1.1</maven-javadoc-plugin.version>
<maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
<maven-war-plugin.version>3.2.3</maven-war-plugin.version>
</properties>

@ -105,8 +105,8 @@ public class JobFailMonitorHelper {
public void toStop(){
toStop = true;
// interrupt and wait
monitorThread.interrupt();
try {
monitorThread.interrupt();
try {
monitorThread.join();
} catch (InterruptedException e) {
logger.error(e.getMessage(), e);
@ -116,7 +116,6 @@ public class JobFailMonitorHelper {
// ---------------------- alarm ----------------------
// email alarm template
private static final String mailBodyTemplate = "<h5>" + I18nUtil.getString("jobconf_monitor_detail") + "</span>" +
"<table border=\"1\" cellpadding=\"3\" style=\"border-collapse:collapse; width:80%;\" >\n" +
" <thead style=\"font-weight: bold;color: #ffffff;background-color: #ff8c00;\" >" +
@ -141,8 +140,6 @@ public class JobFailMonitorHelper {
/**
* fail alarm
*
* @param jobLog
*/
private boolean failAlarm(XxlJobInfo info, XxlJobLog jobLog){
boolean alarmResult = true;

@ -49,17 +49,20 @@ public class JobScheduleHelper {
}
logger.info(">>>>>>>>> init xxl-job admin scheduler success.");
Connection conn = null;
while (!scheduleThreadToStop) {
// Scan Job
long start = System.currentTimeMillis();
Connection conn = null;
Boolean connAutoCommit = null;
PreparedStatement preparedStatement = null;
boolean preReadSuc = true;
try {
if (conn==null || conn.isClosed()) {
conn = XxlJobAdminConfig.getAdminConfig().getDataSource().getConnection();
}
conn = XxlJobAdminConfig.getAdminConfig().getDataSource().getConnection();
connAutoCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
preparedStatement = conn.prepareStatement( "select * from xxl_job_lock where lock_name = 'schedule_lock' for update" );
@ -67,16 +70,16 @@ public class JobScheduleHelper {
// tx start
// 1、预读5s内调度任务
// 1、pre read
long nowTime = System.currentTimeMillis();
List<XxlJobInfo> scheduleList = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleJobQuery(nowTime + PRE_READ_MS);
if (scheduleList!=null && scheduleList.size()>0) {
// 2、推送时间轮
// 2、push time-ring
for (XxlJobInfo jobInfo: scheduleList) {
// 时间轮刻度计算
// time-ring jump
if (nowTime > jobInfo.getTriggerNextTime() + PRE_READ_MS) {
// 过期超5s本地忽略当前时间开始计算下次触发时间
// 2.1、trigger-expire > 5spass && make next-trigger-time
// fresh next
Date nextValidTime = new CronExpression(jobInfo.getJobCron()).getNextValidTimeAfter(new Date());
@ -90,7 +93,7 @@ public class JobScheduleHelper {
}
} else if (nowTime > jobInfo.getTriggerNextTime()) {
// 过期5s内 :立即触发一次,当前时间开始计算下次触发时间;
// 2.2、trigger-expire < 5sdirect-trigger && make next-trigger-time
CronExpression cronExpression = new CronExpression(jobInfo.getJobCron());
long nextTime = cronExpression.getNextValidTimeAfter(new Date()).getTime();
@ -104,7 +107,7 @@ public class JobScheduleHelper {
jobInfo.setTriggerNextTime(nextTime);
// 下次5s内预读一次
// next-trigger-time in 5s, pre-read again
if (jobInfo.getTriggerNextTime() - nowTime < PRE_READ_MS) {
// 1、make ring second
@ -127,7 +130,7 @@ public class JobScheduleHelper {
}
} else {
// 未过期:正常触发,递增计算下次触发时间
// 2.3、trigger-pre-readtime-ring trigger && make next-trigger-time
// 1、make ring second
int ringSecond = (int)((jobInfo.getTriggerNextTime()/1000)%60);
@ -150,7 +153,7 @@ public class JobScheduleHelper {
}
// 3、更新trigger信息
// 3、update trigger info
for (XxlJobInfo jobInfo: scheduleList) {
XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleUpdate(jobInfo);
}
@ -169,11 +172,27 @@ public class JobScheduleHelper {
} finally {
// commit
try {
conn.commit();
} catch (SQLException e) {
if (!scheduleThreadToStop) {
logger.error(e.getMessage(), e);
if (conn != null) {
try {
conn.commit();
} catch (SQLException e) {
if (!scheduleThreadToStop) {
logger.error(e.getMessage(), e);
}
}
try {
conn.setAutoCommit(connAutoCommit);
} catch (SQLException e) {
if (!scheduleThreadToStop) {
logger.error(e.getMessage(), e);
}
}
try {
conn.close();
} catch (SQLException e) {
if (!scheduleThreadToStop) {
logger.error(e.getMessage(), e);
}
}
}
@ -204,12 +223,7 @@ public class JobScheduleHelper {
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
}
}
logger.info(">>>>>>>>>>> xxl-job, JobScheduleHelper#scheduleThread stop");
}
});

@ -90,9 +90,9 @@ $(function() {
"render": function ( data, type, row ) {
// status
if (1 == data) {
return '<small class="label label-success" ><i class="fa fa-clock-o"></i>RUNNING</small>';
return '<small class="label label-success" >RUNNING</small>';
} else {
return '<small class="label label-default" ><i class="fa fa-clock-o"></i>STOP</small>';
return '<small class="label label-default" >STOP</small>';
}
return data;
}

@ -52,6 +52,14 @@
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/top.jfunc.common/utils -->
<dependency>
<groupId>top.jfunc.common</groupId>
<artifactId>utils</artifactId>
<version>1.8.2.3</version>
</dependency>
</dependencies>
</project>

@ -54,7 +54,7 @@ public class ExecutorBizImpl implements ExecutorBiz {
return ReturnT.SUCCESS;
}
return new ReturnT<String>(ReturnT.SUCCESS_CODE, "job thread aleady killed.");
return new ReturnT<String>(ReturnT.SUCCESS_CODE, "job thread already killed.");
}
@Override

@ -4,6 +4,7 @@ import com.xxl.job.core.biz.AdminBiz;
import com.xxl.job.core.biz.ExecutorBiz;
import com.xxl.job.core.biz.impl.ExecutorBizImpl;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobFileAppender;
import com.xxl.job.core.thread.ExecutorRegistryThread;
import com.xxl.job.core.thread.JobLogFileCleanThread;
@ -21,6 +22,9 @@ import com.xxl.rpc.util.IpUtil;
import com.xxl.rpc.util.NetUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import top.jfunc.common.utils.BeanUtil;
import top.jfunc.common.utils.ClassUtil;
import top.jfunc.common.utils.StrUtil;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@ -223,18 +227,49 @@ public class XxlJobExecutor {
}
// ---------------------- job handler repository ----------------------
/// ---------------------- job handler repository ----------------------
private static ConcurrentMap<String, IJobHandler> jobHandlerRepository = new ConcurrentHashMap<String, IJobHandler>();
public static IJobHandler loadJobHandler(String name){
return jobHandlerRepository.get(name);
}
public static IJobHandler registJobHandler(String name, IJobHandler jobHandler){
logger.info(">>>>>>>>>>> xxl-job register jobhandler success, name:{}, jobHandler:{}", name, jobHandler);
return jobHandlerRepository.put(name, jobHandler);
}
public static IJobHandler loadJobHandler(String name){
return jobHandlerRepository.get(name);
/**
* {@link IJobHandler}{@link IJobHandler}
*/
public static void registJobHandler(String... packages){
for (String onePackage : packages) {
Set<Class<?>> jobHandlerClasses = ClassUtil.scanPackageBySuper(onePackage, true, IJobHandler.class);
for (Class<?> jobHandlerClass : jobHandlerClasses) {
String name = determineHandlerName(jobHandlerClass);
IJobHandler jobHandler = BeanUtil.newInstance(jobHandlerClass);
registJobHandler(name , jobHandler);
}
}
}
/**
* 使{@link JobHandler}
*/
private static String determineHandlerName(Class<?> jobHandlerClass) {
String name = StrUtil.lowerFirst(jobHandlerClass.getSimpleName());
if(jobHandlerClass.isAnnotationPresent(JobHandler.class)){
String value = jobHandlerClass.getAnnotation(JobHandler.class).value();
if(!"".equals(value)){
name = value;
}
}
return name;
}
/// ---------------------- job thread repository ----------------------
// ---------------------- job thread repository ----------------------
private static ConcurrentMap<Integer, JobThread> jobThreadRepository = new ConcurrentHashMap<Integer, JobThread>();
public static JobThread registJobThread(int jobId, IJobHandler handler, String removeOldReason){
JobThread newJobThread = new JobThread(jobId, handler);

Loading…
Cancel
Save