Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
3138d48a
提交
3138d48a
authored
6月 29, 2017
作者:
xuxueli
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
任务线程轮空30次后自动销毁,降低低频任务的无效线程消耗。
上级
7a5f3acf
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
21 行增加
和
12 行删除
+21
-12
XXL-JOB官方文档.md
doc/XXL-JOB官方文档.md
+2
-2
JobRegistryMonitorHelper.java
...m/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java
+3
-1
XxlJobExecutor.java
...c/main/java/com/xxl/job/core/executor/XxlJobExecutor.java
+1
-1
JobThread.java
...core/src/main/java/com/xxl/job/core/thread/JobThread.java
+15
-8
没有找到文件。
doc/XXL-JOB官方文档.md
浏览文件 @
3138d48a
...
...
@@ -864,6 +864,8 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
-
3、XxlJobLogger的日志多参数支持;
-
4、路由策略新增 "忙碌转移" 模式:按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;
-
5、路由策略代码重构;
-
6、执行器重复注册问题修复;
-
7、任务线程轮空30次后自动销毁,降低低频任务的无效线程消耗。
#### TODO LIST
-
1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
...
...
@@ -874,8 +876,6 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
-
6、任务依赖,流程图,子任务+会签任务,各节点日志;
-
7、调度任务优先级;
-
8、移除quartz依赖,重写调度模块:新增或恢复任务时将下次执行记录插入delayqueue,调度中心集群竞争分布式锁,成功节点批量加载到期delayqueue数据,批量执行。
-
9、任务线程轮空30次后自动销毁,降低低频任务的无效线程消耗。
-
10、注册界面,出现重复地址问题;
## 七、其他
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java
浏览文件 @
3138d48a
...
...
@@ -46,7 +46,9 @@ public class JobRegistryMonitorHelper {
if
(
registryList
==
null
)
{
registryList
=
new
ArrayList
<
String
>();
}
registryList
.
add
(
item
.
getRegistryValue
());
if
(!
registryList
.
contains
(
item
.
getRegistryValue
()))
{
registryList
.
add
(
item
.
getRegistryValue
());
}
temp
.
put
(
groupKey
,
registryList
);
}
}
...
...
xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java
浏览文件 @
3138d48a
...
...
@@ -125,7 +125,7 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe
// ---------------------------------- job thread repository
private
static
ConcurrentHashMap
<
Integer
,
JobThread
>
JobThreadRepository
=
new
ConcurrentHashMap
<
Integer
,
JobThread
>();
public
static
JobThread
registJobThread
(
int
jobId
,
IJobHandler
handler
,
String
removeOldReason
){
JobThread
newJobThread
=
new
JobThread
(
handler
);
JobThread
newJobThread
=
new
JobThread
(
jobId
,
handler
);
newJobThread
.
start
();
logger
.
info
(
">>>>>>>>>>> xxl-job regist JobThread success, jobId:{}, handler:{}"
,
new
Object
[]{
jobId
,
handler
});
...
...
xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java
浏览文件 @
3138d48a
...
...
@@ -3,6 +3,7 @@ package com.xxl.job.core.thread;
import
com.xxl.job.core.biz.model.HandleCallbackParam
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.biz.model.TriggerParam
;
import
com.xxl.job.core.executor.XxlJobExecutor
;
import
com.xxl.job.core.handler.IJobHandler
;
import
com.xxl.job.core.log.XxlJobFileAppender
;
import
com.xxl.job.core.log.XxlJobLogger
;
...
...
@@ -23,7 +24,8 @@ import java.util.concurrent.TimeUnit;
*/
public
class
JobThread
extends
Thread
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
JobThread
.
class
);
private
int
jobId
;
private
IJobHandler
handler
;
private
LinkedBlockingQueue
<
TriggerParam
>
triggerQueue
;
private
ConcurrentHashSet
<
Integer
>
triggerLogIdSet
;
// avoid repeat trigger for the same TRIGGER_LOG_ID
...
...
@@ -32,12 +34,14 @@ public class JobThread extends Thread{
private
String
stopReason
;
private
boolean
running
=
false
;
// if running job
private
int
idleTimes
=
0
;
// idel times
public
JobThread
(
IJobHandler
handler
)
{
public
JobThread
(
int
jobId
,
IJobHandler
handler
)
{
this
.
jobId
=
jobId
;
this
.
handler
=
handler
;
triggerQueue
=
new
LinkedBlockingQueue
<
TriggerParam
>();
triggerLogIdSet
=
new
ConcurrentHashSet
<
Integer
>();
t
his
.
t
riggerQueue
=
new
LinkedBlockingQueue
<
TriggerParam
>();
t
his
.
t
riggerLogIdSet
=
new
ConcurrentHashSet
<
Integer
>();
}
public
IJobHandler
getHandler
()
{
return
handler
;
...
...
@@ -88,11 +92,13 @@ public class JobThread extends Thread{
public
void
run
()
{
while
(!
toStop
){
running
=
false
;
idleTimes
++;
try
{
// to check toStop signal, we need cycle, so wo cannot use queue.take(), instand of poll(timeout)
TriggerParam
triggerParam
=
triggerQueue
.
poll
(
3L
,
TimeUnit
.
SECONDS
);
if
(
triggerParam
!=
null
)
{
running
=
true
;
idleTimes
=
0
;
triggerLogIdSet
.
remove
(
triggerParam
.
getLogId
());
// parse param
...
...
@@ -126,9 +132,6 @@ public class JobThread extends Thread{
XxlJobLogger
.
log
(
"<br>----------- JobThread Exception:"
+
errorMsg
+
"<br>----------- xxl-job job execute end(error) -----------"
);
}
// callback handler info
if
(!
toStop
)
{
...
...
@@ -139,8 +142,12 @@ public class JobThread extends Thread{
ReturnT
<
String
>
stopResult
=
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
stopReason
+
" [业务运行中,被强制终止]"
);
TriggerCallbackThread
.
pushCallBack
(
new
HandleCallbackParam
(
triggerParam
.
getLogId
(),
stopResult
));
}
}
else
{
if
(
idleTimes
>
3
)
{
XxlJobExecutor
.
removeJobThread
(
jobId
,
"excutor idel times over limit."
);
}
}
}
catch
(
Exception
e
)
{
}
catch
(
Throwable
e
)
{
if
(
toStop
)
{
XxlJobLogger
.
log
(
"<br>----------- xxl-job toStop, stopReason:"
+
stopReason
);
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论