Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
b8e19660
提交
b8e19660
authored
3月 02, 2017
作者:
xueli.xue
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Coding
上级
725d1f4f
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
89 行增加
和
36 行删除
+89
-36
JobLogController.java
...n/java/com/xxl/job/admin/controller/JobLogController.java
+2
-2
RemoteHttpJobBean.java
...ava/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
+4
-4
XxlJobDynamicScheduler.java
...m/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java
+12
-2
JobMonitorHelper.java
.../java/com/xxl/job/admin/core/thread/JobMonitorHelper.java
+22
-11
JobRegistryHelper.java
...java/com/xxl/job/admin/core/thread/JobRegistryHelper.java
+18
-8
common.macro.ftl
.../src/main/webapp/WEB-INF/template/common/common.macro.ftl
+1
-1
joblog.index.ftl
.../src/main/webapp/WEB-INF/template/joblog/joblog.index.ftl
+2
-2
joblog.index.1.js
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js
+15
-4
ExecutorBizImpl.java
.../main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java
+2
-2
XxlJobExecutor.java
...c/main/java/com/xxl/job/core/executor/XxlJobExecutor.java
+3
-0
ExecutorRegistryThread.java
.../java/com/xxl/job/core/thread/ExecutorRegistryThread.java
+8
-0
没有找到文件。
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
浏览文件 @
b8e19660
...
...
@@ -149,8 +149,8 @@ public class JobLogController {
ReturnT
<
String
>
runResult
=
executorBiz
.
kill
(
String
.
valueOf
(
log
.
getJobGroup
()),
log
.
getJobName
());
if
(
ReturnT
.
SUCCESS_CODE
==
runResult
.
getCode
())
{
log
.
setHandleCode
(
ReturnT
.
SUCCESS
_CODE
);
log
.
setHandleMsg
(
"人为操作主动终止
"
);
log
.
setHandleCode
(
ReturnT
.
FAIL
_CODE
);
log
.
setHandleMsg
(
"人为操作主动终止
:"
+
(
runResult
.
getMsg
()!=
null
?
runResult
.
getMsg
():
""
)
);
log
.
setHandleTime
(
new
Date
());
xxlJobLogDao
.
updateHandleInfo
(
log
);
return
new
ReturnT
<
String
>(
runResult
.
getMsg
());
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
浏览文件 @
b8e19660
...
...
@@ -74,14 +74,14 @@ public class RemoteHttpJobBean extends QuartzJobBean {
}
// failover trigger
ReturnT
<
String
>
responseModel
=
failoverTrigger
(
addressList
,
triggerParam
,
jobLog
);
ReturnT
<
String
>
triggerResult
=
failoverTrigger
(
addressList
,
triggerParam
,
jobLog
);
jobLog
.
setExecutorHandler
(
jobInfo
.
getExecutorHandler
());
jobLog
.
setExecutorParam
(
jobInfo
.
getExecutorParam
());
logger
.
info
(
">>>>>>>>>>> xxl-job failoverTrigger
response, jobId:{}, responseModel:{}"
,
jobLog
.
getId
(),
responseModel
.
toString
());
logger
.
info
(
">>>>>>>>>>> xxl-job failoverTrigger
, jobId:{}, triggerResult:{}"
,
jobLog
.
getId
(),
triggerResult
.
toString
());
// update trigger info 2/2
jobLog
.
setTriggerCode
(
responseModel
.
getCode
());
jobLog
.
setTriggerMsg
(
responseModel
.
getMsg
());
jobLog
.
setTriggerCode
(
triggerResult
.
getCode
());
jobLog
.
setTriggerMsg
(
triggerResult
.
getMsg
());
XxlJobDynamicScheduler
.
xxlJobLogDao
.
updateTriggerInfo
(
jobLog
);
// monitor triger
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java
浏览文件 @
b8e19660
...
...
@@ -2,6 +2,7 @@ package com.xxl.job.admin.core.schedule;
import
com.xxl.job.admin.core.jobbean.RemoteHttpJobBean
;
import
com.xxl.job.admin.core.model.XxlJobInfo
;
import
com.xxl.job.admin.core.thread.JobMonitorHelper
;
import
com.xxl.job.admin.core.thread.JobRegistryHelper
;
import
com.xxl.job.admin.dao.IXxlJobGroupDao
;
import
com.xxl.job.admin.dao.IXxlJobInfoDao
;
...
...
@@ -67,12 +68,21 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
callbackAddress
=
IpUtil
.
getIpPort
(
callBackPort
);;
}
// init JobRegistryHelper
JobRegistryHelper
.
discover
(
"g"
,
"k"
);
// admin registry run
JobRegistryHelper
.
getInstance
().
start
();
// admin monitor run
JobMonitorHelper
.
getInstance
().
start
();
}
// destroy
public
void
destroy
(){
// admin registry stop
JobRegistryHelper
.
getInstance
().
stop
();
// admin monitor stop
JobMonitorHelper
.
getInstance
().
stop
();
serverFactory
.
destroy
();
}
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobMonitorHelper.java
浏览文件 @
b8e19660
...
...
@@ -16,28 +16,32 @@ import java.util.Set;
import
java.util.concurrent.*
;
/**
* job monitor
helper
* job monitor
instance
* @author xuxueli 2015-9-1 18:05:56
*/
public
class
JobMonitorHelper
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
JobMonitorHelper
.
class
);
private
static
JobMonitorHelper
helper
=
new
JobMonitorHelper
();
private
ExecutorService
executor
=
Executors
.
newCachedThreadPool
();
private
static
JobMonitorHelper
instance
=
new
JobMonitorHelper
();
public
static
JobMonitorHelper
getInstance
(){
return
instance
;
}
private
LinkedBlockingQueue
<
Integer
>
queue
=
new
LinkedBlockingQueue
<
Integer
>(
0xfff8
);
private
ConcurrentHashMap
<
String
,
Integer
>
countMap
=
new
ConcurrentHashMap
<
String
,
Integer
>();
public
JobMonitorHelper
(){
// consumer
executor
.
execute
(
new
Runnable
()
{
private
Thread
monitorThread
;
private
boolean
toStop
=
false
;
public
void
start
(){
monitorThread
=
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
while
(
true
)
{
try
{
logger
.
debug
(
">>>>>>>>>>> job monitor beat ... "
);
Integer
jobLogId
=
JobMonitorHelper
.
helper
.
queue
.
take
();
Integer
jobLogId
=
JobMonitorHelper
.
instance
.
queue
.
take
();
if
(
jobLogId
!=
null
&&
jobLogId
>
0
)
{
logger
.
info
(
">>>>>>>>>>> job monitor heat success, JobLogId:{}"
,
jobLogId
);
logger
.
debug
(
">>>>>>>>>>> job monitor heat success, JobLogId:{}"
,
jobLogId
);
XxlJobLog
log
=
XxlJobDynamicScheduler
.
xxlJobLogDao
.
load
(
jobLogId
);
if
(
log
!=
null
)
{
if
(
ReturnT
.
SUCCESS_CODE
==
log
.
getTriggerCode
()
&&
log
.
getHandleCode
()==
0
)
{
...
...
@@ -73,11 +77,18 @@ public class JobMonitorHelper {
}
}
});
monitorThread
.
setDaemon
(
true
);
monitorThread
.
start
();
}
public
void
stop
(){
toStop
=
true
;
//monitorThread.interrupt();
}
// producer
public
static
void
monitor
(
int
jobLogId
){
JobMonitorHelper
.
helper
.
queue
.
offer
(
jobLogId
);
getInstance
()
.
queue
.
offer
(
jobLogId
);
}
}
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java
浏览文件 @
b8e19660
...
...
@@ -12,20 +12,26 @@ import java.util.concurrent.ConcurrentHashMap;
import
java.util.concurrent.TimeUnit
;
/**
* job registry
helper
* job registry
instance
* @author xuxueli 2016-10-02 19:10:24
*/
public
class
JobRegistryHelper
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
JobRegistryHelper
.
class
);
private
static
JobRegistryHelper
helper
=
new
JobRegistryHelper
();
private
static
JobRegistryHelper
instance
=
new
JobRegistryHelper
();
public
static
JobRegistryHelper
getInstance
(){
return
instance
;
}
private
ConcurrentHashMap
<
String
,
List
<
String
>>
registMap
=
new
ConcurrentHashMap
<
String
,
List
<
String
>>();
public
JobRegistryHelper
(){
Thread
registryThread
=
new
Thread
(
new
Runnable
()
{
private
Thread
registryThread
;
private
boolean
toStop
=
false
;
public
void
start
(){
registryThread
=
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
while
(
true
)
{
while
(
!
toStop
)
{
try
{
// registry admin
int
ret
=
XxlJobDynamicScheduler
.
xxlJobRegistryDao
.
registryUpdate
(
RegistHelper
.
RegistType
.
ADMIN
.
name
(),
RegistHelper
.
RegistType
.
ADMIN
.
name
(),
XxlJobDynamicScheduler
.
getCallbackAddress
());
...
...
@@ -50,19 +56,23 @@ public class JobRegistryHelper {
}
registMap
=
temp
;
}
catch
(
Exception
e
)
{
logger
.
error
(
"job registry
helper
error:{}"
,
e
);
logger
.
error
(
"job registry
instance
error:{}"
,
e
);
}
try
{
TimeUnit
.
SECONDS
.
sleep
(
RegistHelper
.
TIMEOUT
);
}
catch
(
InterruptedException
e
)
{
logger
.
error
(
"job registry
helper
error:{}"
,
e
);
logger
.
error
(
"job registry
instance
error:{}"
,
e
);
}
}
}
});
registryThread
.
setDaemon
(
true
);
registryThread
.
start
();
}
public
void
stop
(){
toStop
=
true
;
//registryThread.interrupt();
}
private
static
String
makeGroupKey
(
String
registryGroup
,
String
registryKey
){
...
...
@@ -71,7 +81,7 @@ public class JobRegistryHelper {
public
static
List
<
String
>
discover
(
String
registryGroup
,
String
registryKey
){
String
groupKey
=
makeGroupKey
(
registryGroup
,
registryKey
);
return
helper
.
registMap
.
get
(
groupKey
);
return
instance
.
registMap
.
get
(
groupKey
);
}
}
xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl
浏览文件 @
b8e19660
...
...
@@ -173,7 +173,7 @@
<#macro commonFooter >
<footer class="main-footer">
<div class="pull-right hidden-xs">
<b>Version</b> 1.
5
<b>Version</b> 1.
6
</div>
<strong>Copyright © 2015-${.now?string('yyyy')}
<a href="https://github.com/xuxueli/xxl-job" target="_blank" >github</a>
...
...
xxl-job-admin/src/main/webapp/WEB-INF/template/joblog/joblog.index.ftl
浏览文件 @
b8e19660
...
...
@@ -82,10 +82,10 @@
<th
name=
"executorHandler"
>
JobHandler
</th>
<th
name=
"executorParam"
>
任务参数
</th>
<th
name=
"triggerTime"
>
调度时间
</th>
<th
name=
"trigger
Status
"
>
调度结果
</th>
<th
name=
"trigger
Code
"
>
调度结果
</th>
<th
name=
"triggerMsg"
>
调度备注
</th>
<th
name=
"handleTime"
>
执行时间
</th>
<th
name=
"handle
Status
"
>
执行结果
</th>
<th
name=
"handle
Code
"
>
执行结果
</th>
<th
name=
"handleMsg"
>
执行备注
</th>
<th
name=
"handleMsg"
>
操作
</th>
</tr>
...
...
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js
浏览文件 @
b8e19660
...
...
@@ -112,7 +112,13 @@ $(function() {
return
data
?
moment
(
new
Date
(
data
)).
format
(
"YYYY-MM-DD HH:mm:ss"
):
""
;
}
},
{
"data"
:
'triggerStatus'
},
{
"data"
:
'triggerCode'
,
"render"
:
function
(
data
,
type
,
row
)
{
return
(
data
==
200
)?
'<span style="color: green">成功</span>'
:(
data
==
500
)?
'<span style="color: red">失败</span>'
:(
data
==
0
)?
''
:
data
;
}
},
{
"data"
:
'triggerMsg'
,
"render"
:
function
(
data
,
type
,
row
)
{
...
...
@@ -125,7 +131,12 @@ $(function() {
return
data
?
moment
(
new
Date
(
data
)).
format
(
"YYYY-MM-DD HH:mm:ss"
):
""
;
}
},
{
"data"
:
'handleStatus'
,
"bSortable"
:
false
},
{
"data"
:
'handleCode'
,
"render"
:
function
(
data
,
type
,
row
)
{
return
(
data
==
200
)?
'<span style="color: green">成功</span>'
:(
data
==
500
)?
'<span style="color: red">失败</span>'
:(
data
==
0
)?
''
:
data
;
}
},
{
"data"
:
'handleMsg'
,
"render"
:
function
(
data
,
type
,
row
)
{
...
...
@@ -136,9 +147,9 @@ $(function() {
"render"
:
function
(
data
,
type
,
row
)
{
// better support expression or string, not function
return
function
()
{
if
(
row
.
trigger
Status
==
'SUCCESS'
||
row
.
handleStatus
){
if
(
row
.
trigger
Code
==
200
){
var
temp
=
'<a href="javascript:;" class="logDetail" _id="'
+
row
.
id
+
'">执行日志</a>'
;
if
(
!
row
.
handleStatus
){
if
(
row
.
handleCode
==
0
){
temp
+=
'<br><a href="javascript:;" class="logKill" _id="'
+
row
.
id
+
'">终止任务</a>'
;
}
return
temp
;
...
...
xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java
浏览文件 @
b8e19660
...
...
@@ -35,11 +35,11 @@ public class ExecutorBizImpl implements ExecutorBiz {
IJobHandler
handler
=
jobThread
.
getHandler
();
jobThread
.
toStop
(
"人工手动终止"
);
jobThread
.
interrupt
();
//XxlJobExecutor.registJobThread(jobKey, handler
);
XxlJobExecutor
.
removeJobThread
(
jobKey
);
return
ReturnT
.
SUCCESS
;
}
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"job thread not foun
d."
);
return
new
ReturnT
<
String
>(
ReturnT
.
SUCCESS_CODE
,
"job thread aleady kille
d."
);
}
@Override
...
...
xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java
浏览文件 @
b8e19660
...
...
@@ -101,5 +101,8 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe
public
static
JobThread
loadJobThread
(
String
jobKey
){
return
JobThreadRepository
.
get
(
jobKey
);
}
public
static
void
removeJobThread
(
String
jobKey
){
JobThreadRepository
.
remove
(
jobKey
);
}
}
xxl-job-core/src/main/java/com/xxl/job/core/thread/ExecutorRegistryThread.java
0 → 100644
浏览文件 @
b8e19660
package
com
.
xxl
.
job
.
core
.
thread
;
/**
* Created by xuxueli on 17/3/2.
*/
public
class
ExecutorRegistryThread
extends
Thread
{
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论