Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
8b2731d2
提交
8b2731d2
authored
11月 19, 2019
作者:
xuxueli
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
调度中心任务平均分配,触发组件每次获取与线程池数量相关数量的任务,避免大量任务集中在单个调度中心集群节点;
上级
a530dfe2
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
96 行增加
和
52 行删除
+96
-52
XXL-JOB官方文档.md
doc/XXL-JOB官方文档.md
+10
-10
XxlJobAdminConfig.java
...n/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java
+20
-0
XxlJobScheduler.java
...ava/com/xxl/job/admin/core/scheduler/XxlJobScheduler.java
+8
-5
JobScheduleHelper.java
...java/com/xxl/job/admin/core/thread/JobScheduleHelper.java
+4
-1
JobTriggerPoolHelper.java
...a/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
+47
-35
XxlJobInfoDao.java
...in/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java
+1
-1
application.properties
xxl-job-admin/src/main/resources/application.properties
+4
-0
XxlJobInfoMapper.xml
...in/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml
+2
-0
没有找到文件。
doc/XXL-JOB官方文档.md
浏览文件 @
8b2731d2
...
@@ -1576,18 +1576,17 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
...
@@ -1576,18 +1576,17 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
-
9、任务触发组件加载顺序调整,避免小概率情况下组件随机加载顺序导致的I18N的NPE问题;
-
9、任务触发组件加载顺序调整,避免小概率情况下组件随机加载顺序导致的I18N的NPE问题;
-
10、项目依赖升级至较新稳定版本,如spring、spring-boot、mybatis、slf4j、groovy等等;
-
10、项目依赖升级至较新稳定版本,如spring、spring-boot、mybatis、slf4j、groovy等等;
-
11、JobThread自销毁优化,避免并发触发导致triggerQueue中任务丢失问题;
-
11、JobThread自销毁优化,避免并发触发导致triggerQueue中任务丢失问题;
-
12、
[
ING,交互兼容问题待处理
]
Cron在线生成工具:任务新增、编辑框通过组件在线生成Cron表达式;
-
12、Cron在线生成工具:任务新增、编辑框通过组件在线生成Cron表达式;
-
13、Cron下次执行时间查询:支持通过界面在线查看后续连续5次执行时间;
-
13、Cron下次执行时间查询:支持通过界面在线查看后续连续5次执行时间;
-
14、任务重试时参数丢失的问题修复;
-
14、任务重试时参数丢失的问题修复;
-
15、
[
ING
]
xxl-rpc服务端线程优化,降低线程内存开销;
-
15、调度中心密码限制18位,修复修改密码超过18位无法登陆的问题;
-
16、
[
ING
]
调度日志优化:支持设置日志保留天数,过期日志天维度记录报表,并清理;调度报表汇总实时数据和报表;
-
16、任务告警组件分页参数无效问题修复;
-
17、
[
ING
]
父子任务参数传递;流程任务等,透传动态参数;
-
17、DB脚本默认编码改为utf8mb4,修复字符乱码问题(建议Mysql版本5.7+);
-
18、
[
ING
]
调度中心任务平均分配,触发组件每次获取与线程池数量相关数量的任务,避免大量任务集中在单个调度中心集群节点。
-
18、调度中心任务平均分配,触发组件每次获取与线程池数量相关数量的任务,避免大量任务集中在单个调度中心集群节点;
-
19、调度中心密码限制18位,修复修改密码超过18位无法登陆的问题;
-
19、
[
ING
]
xxl-rpc服务端线程优化,降低线程内存开销;
-
20、
[
ING
]
调度中心日志删除,改为分页获取ID,根据ID删除的方式;
-
20、
[
ING
]
调度日志优化:支持设置日志保留天数,过期日志天维度记录报表,并清理;调度报表汇总实时数据和报表;
-
21、
[
ING
]
任务回调改为restful方式;
-
21、
[
ING
]
调度中心日志删除,改为分页获取ID,根据ID删除的方式;
-
22、任务告警组件分页参数无效问题修复;
-
22、
[
ING
]
任务回调改为restful方式;
-
23、DB脚本默认编码改为utf8mb4,修复字符乱码问题(建议Mysql版本5.7+);
### TODO LIST
### TODO LIST
...
@@ -1625,6 +1624,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
...
@@ -1625,6 +1624,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
-
32、AccessToken按照执行器维度设置;控制调度、回调;
-
32、AccessToken按照执行器维度设置;控制调度、回调;
-
33、任务执行一次的时候指定IP;
-
33、任务执行一次的时候指定IP;
-
34、通讯调整;双向HTTP,回调和其他API自定义AccessToken,Restful,执行器复用容器端口;
-
34、通讯调整;双向HTTP,回调和其他API自定义AccessToken,Restful,执行器复用容器端口;
-
35、父子任务参数传递;流程任务等,透传动态参数;
## 七、其他
## 七、其他
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java
浏览文件 @
8b2731d2
...
@@ -60,6 +60,12 @@ public class XxlJobAdminConfig implements InitializingBean, DisposableBean {
...
@@ -60,6 +60,12 @@ public class XxlJobAdminConfig implements InitializingBean, DisposableBean {
@Value
(
"${spring.mail.username}"
)
@Value
(
"${spring.mail.username}"
)
private
String
emailUserName
;
private
String
emailUserName
;
@Value
(
"${xxl.job.triggerpool.fast.max}"
)
private
int
triggerPoolFastMax
;
@Value
(
"${xxl.job.triggerpool.slow.max}"
)
private
int
triggerPoolSlowMax
;
// dao, service
// dao, service
@Resource
@Resource
...
@@ -90,6 +96,20 @@ public class XxlJobAdminConfig implements InitializingBean, DisposableBean {
...
@@ -90,6 +96,20 @@ public class XxlJobAdminConfig implements InitializingBean, DisposableBean {
return
emailUserName
;
return
emailUserName
;
}
}
public
int
getTriggerPoolFastMax
()
{
if
(
triggerPoolFastMax
<
200
)
{
return
200
;
}
return
triggerPoolFastMax
;
}
public
int
getTriggerPoolSlowMax
()
{
if
(
triggerPoolSlowMax
<
100
)
{
return
100
;
}
return
triggerPoolSlowMax
;
}
public
XxlJobLogDao
getXxlJobLogDao
()
{
public
XxlJobLogDao
getXxlJobLogDao
()
{
return
xxlJobLogDao
;
return
xxlJobLogDao
;
}
}
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/scheduler/XxlJobScheduler.java
浏览文件 @
8b2731d2
...
@@ -39,14 +39,17 @@ public class XxlJobScheduler {
...
@@ -39,14 +39,17 @@ public class XxlJobScheduler {
// init i18n
// init i18n
initI18n
();
initI18n
();
// admin-server
initRpcProvider
();
// admin registry monitor run
// admin registry monitor run
JobRegistryMonitorHelper
.
getInstance
().
start
();
JobRegistryMonitorHelper
.
getInstance
().
start
();
// admin monitor run
// admin monitor run
JobFailMonitorHelper
.
getInstance
().
start
();
JobFailMonitorHelper
.
getInstance
().
start
();
// admin
-server
// admin
trigger pool start
initRpcProvider
();
JobTriggerPoolHelper
.
toStart
();
// start-schedule
// start-schedule
JobScheduleHelper
.
getInstance
().
start
();
JobScheduleHelper
.
getInstance
().
start
();
...
@@ -63,12 +66,12 @@ public class XxlJobScheduler {
...
@@ -63,12 +66,12 @@ public class XxlJobScheduler {
// admin trigger pool stop
// admin trigger pool stop
JobTriggerPoolHelper
.
toStop
();
JobTriggerPoolHelper
.
toStop
();
// admin registry stop
JobRegistryMonitorHelper
.
getInstance
().
toStop
();
// admin monitor stop
// admin monitor stop
JobFailMonitorHelper
.
getInstance
().
toStop
();
JobFailMonitorHelper
.
getInstance
().
toStop
();
// admin registry stop
JobRegistryMonitorHelper
.
getInstance
().
toStop
();
// admin-server
// admin-server
stopRpcProvider
();
stopRpcProvider
();
}
}
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java
浏览文件 @
8b2731d2
...
@@ -50,6 +50,9 @@ public class JobScheduleHelper {
...
@@ -50,6 +50,9 @@ public class JobScheduleHelper {
}
}
logger
.
info
(
">>>>>>>>> init xxl-job admin scheduler success."
);
logger
.
info
(
">>>>>>>>> init xxl-job admin scheduler success."
);
// pre-read count: treadpool-size * trigger-qps (each trigger cost 50ms, qps = 1000/50 = 20)
int
preReadCount
=
(
XxlJobAdminConfig
.
getAdminConfig
().
getTriggerPoolFastMax
()
+
XxlJobAdminConfig
.
getAdminConfig
().
getTriggerPoolSlowMax
())
*
20
;
while
(!
scheduleThreadToStop
)
{
while
(!
scheduleThreadToStop
)
{
// Scan Job
// Scan Job
...
@@ -73,7 +76,7 @@ public class JobScheduleHelper {
...
@@ -73,7 +76,7 @@ public class JobScheduleHelper {
// 1、pre read
// 1、pre read
long
nowTime
=
System
.
currentTimeMillis
();
long
nowTime
=
System
.
currentTimeMillis
();
List
<
XxlJobInfo
>
scheduleList
=
XxlJobAdminConfig
.
getAdminConfig
().
getXxlJobInfoDao
().
scheduleJobQuery
(
nowTime
+
PRE_READ_MS
);
List
<
XxlJobInfo
>
scheduleList
=
XxlJobAdminConfig
.
getAdminConfig
().
getXxlJobInfoDao
().
scheduleJobQuery
(
nowTime
+
PRE_READ_MS
,
preReadCount
);
if
(
scheduleList
!=
null
&&
scheduleList
.
size
()>
0
)
{
if
(
scheduleList
!=
null
&&
scheduleList
.
size
()>
0
)
{
// 2、push time-ring
// 2、push time-ring
for
(
XxlJobInfo
jobInfo:
scheduleList
)
{
for
(
XxlJobInfo
jobInfo:
scheduleList
)
{
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
浏览文件 @
8b2731d2
package
com
.
xxl
.
job
.
admin
.
core
.
thread
;
package
com
.
xxl
.
job
.
admin
.
core
.
thread
;
import
com.xxl.job.admin.core.conf.XxlJobAdminConfig
;
import
com.xxl.job.admin.core.trigger.TriggerTypeEnum
;
import
com.xxl.job.admin.core.trigger.TriggerTypeEnum
;
import
com.xxl.job.admin.core.trigger.XxlJobTrigger
;
import
com.xxl.job.admin.core.trigger.XxlJobTrigger
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
...
@@ -20,31 +21,44 @@ public class JobTriggerPoolHelper {
...
@@ -20,31 +21,44 @@ public class JobTriggerPoolHelper {
// ---------------------- trigger pool ----------------------
// ---------------------- trigger pool ----------------------
// fast/slow thread pool
// fast/slow thread pool
private
ThreadPoolExecutor
fastTriggerPool
=
new
ThreadPoolExecutor
(
private
ThreadPoolExecutor
fastTriggerPool
=
null
;
50
,
private
ThreadPoolExecutor
slowTriggerPool
=
null
;
200
,
60L
,
public
void
start
(){
TimeUnit
.
SECONDS
,
fastTriggerPool
=
new
ThreadPoolExecutor
(
new
LinkedBlockingQueue
<
Runnable
>(
1000
),
10
,
new
ThreadFactory
()
{
XxlJobAdminConfig
.
getAdminConfig
().
getTriggerPoolFastMax
(),
@Override
60L
,
public
Thread
newThread
(
Runnable
r
)
{
TimeUnit
.
SECONDS
,
return
new
Thread
(
r
,
"xxl-job, admin JobTriggerPoolHelper-fastTriggerPool-"
+
r
.
hashCode
());
new
LinkedBlockingQueue
<
Runnable
>(
1000
),
}
new
ThreadFactory
()
{
});
@Override
public
Thread
newThread
(
Runnable
r
)
{
private
ThreadPoolExecutor
slowTriggerPool
=
new
ThreadPoolExecutor
(
return
new
Thread
(
r
,
"xxl-job, admin JobTriggerPoolHelper-fastTriggerPool-"
+
r
.
hashCode
());
10
,
}
100
,
});
60L
,
TimeUnit
.
SECONDS
,
slowTriggerPool
=
new
ThreadPoolExecutor
(
new
LinkedBlockingQueue
<
Runnable
>(
2000
),
10
,
new
ThreadFactory
()
{
XxlJobAdminConfig
.
getAdminConfig
().
getTriggerPoolSlowMax
(),
@Override
60L
,
public
Thread
newThread
(
Runnable
r
)
{
TimeUnit
.
SECONDS
,
return
new
Thread
(
r
,
"xxl-job, admin JobTriggerPoolHelper-slowTriggerPool-"
+
r
.
hashCode
());
new
LinkedBlockingQueue
<
Runnable
>(
2000
),
}
new
ThreadFactory
()
{
});
@Override
public
Thread
newThread
(
Runnable
r
)
{
return
new
Thread
(
r
,
"xxl-job, admin JobTriggerPoolHelper-slowTriggerPool-"
+
r
.
hashCode
());
}
});
}
public
void
stop
()
{
//triggerPool.shutdown();
fastTriggerPool
.
shutdownNow
();
slowTriggerPool
.
shutdownNow
();
logger
.
info
(
">>>>>>>>> xxl-job trigger thread pool shutdown success."
);
}
// job timeout count
// job timeout count
...
@@ -100,17 +114,19 @@ public class JobTriggerPoolHelper {
...
@@ -100,17 +114,19 @@ public class JobTriggerPoolHelper {
});
});
}
}
public
void
stop
()
{
//triggerPool.shutdown();
fastTriggerPool
.
shutdownNow
();
slowTriggerPool
.
shutdownNow
();
logger
.
info
(
">>>>>>>>> xxl-job trigger thread pool shutdown success."
);
}
// ---------------------- helper ----------------------
// ---------------------- helper ----------------------
private
static
JobTriggerPoolHelper
helper
=
new
JobTriggerPoolHelper
();
private
static
JobTriggerPoolHelper
helper
=
new
JobTriggerPoolHelper
();
public
static
void
toStart
()
{
helper
.
start
();
}
public
static
void
toStop
()
{
helper
.
stop
();
}
/**
/**
* @param jobId
* @param jobId
* @param triggerType
* @param triggerType
...
@@ -126,8 +142,4 @@ public class JobTriggerPoolHelper {
...
@@ -126,8 +142,4 @@ public class JobTriggerPoolHelper {
helper
.
addTrigger
(
jobId
,
triggerType
,
failRetryCount
,
executorShardingParam
,
executorParam
);
helper
.
addTrigger
(
jobId
,
triggerType
,
failRetryCount
,
executorShardingParam
,
executorParam
);
}
}
public
static
void
toStop
()
{
helper
.
stop
();
}
}
}
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java
浏览文件 @
8b2731d2
...
@@ -41,7 +41,7 @@ public interface XxlJobInfoDao {
...
@@ -41,7 +41,7 @@ public interface XxlJobInfoDao {
public
int
findAllCount
();
public
int
findAllCount
();
public
List
<
XxlJobInfo
>
scheduleJobQuery
(
@Param
(
"maxNextTime"
)
long
maxNextTime
);
public
List
<
XxlJobInfo
>
scheduleJobQuery
(
@Param
(
"maxNextTime"
)
long
maxNextTime
,
@Param
(
"pagesize"
)
int
pagesize
);
public
int
scheduleUpdate
(
XxlJobInfo
xxlJobInfo
);
public
int
scheduleUpdate
(
XxlJobInfo
xxlJobInfo
);
...
...
xxl-job-admin/src/main/resources/application.properties
浏览文件 @
8b2731d2
...
@@ -44,3 +44,7 @@ xxl.job.accessToken=
...
@@ -44,3 +44,7 @@ xxl.job.accessToken=
### xxl-job, i18n (default empty as chinese, "en" as english)
### xxl-job, i18n (default empty as chinese, "en" as english)
xxl.job.i18n
=
xxl.job.i18n
=
## xxl-job, triggerpool max size
xxl.job.triggerpool.fast.max
=
200
xxl.job.triggerpool.slow.max
=
100
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml
浏览文件 @
8b2731d2
...
@@ -213,6 +213,8 @@
...
@@ -213,6 +213,8 @@
FROM xxl_job_info AS t
FROM xxl_job_info AS t
WHERE t.trigger_status = 1
WHERE t.trigger_status = 1
and t.trigger_next_time
<![CDATA[ <= ]]>
#{maxNextTime}
and t.trigger_next_time
<![CDATA[ <= ]]>
#{maxNextTime}
ORDER BY id ASC
LIMIT #{pagesize}
</select>
</select>
<update
id=
"scheduleUpdate"
parameterType=
"com.xxl.job.admin.core.model.XxlJobInfo"
>
<update
id=
"scheduleUpdate"
parameterType=
"com.xxl.job.admin.core.model.XxlJobInfo"
>
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论