Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
ae7fe92f
提交
ae7fe92f
authored
8月 18, 2018
作者:
xuxueli
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
任务调度备注中标注任务触发类型,如Cron触发、父任务触发、API触发等等,方便排查调度日志;
上级
9ac897f5
显示空白字符变更
内嵌
并排
正在显示
13 个修改的文件
包含
53 行增加
和
66 行删除
+53
-66
XXL-JOB官方文档.md
doc/XXL-JOB官方文档.md
+2
-0
JobInfoController.java
.../java/com/xxl/job/admin/controller/JobInfoController.java
+2
-1
JobLogController.java
...n/java/com/xxl/job/admin/controller/JobLogController.java
+0
-3
RemoteHttpJobBean.java
...ava/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
+3
-1
JobFailMonitorHelper.java
...a/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
+22
-4
JobTriggerPoolHelper.java
...a/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
+4
-4
XxlJobTrigger.java
...in/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
+6
-24
AdminBizImpl.java
...ain/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
+2
-15
message.properties
xxl-job-admin/src/main/resources/i18n/message.properties
+6
-0
message_en.properties
xxl-job-admin/src/main/resources/i18n/message_en.properties
+6
-0
joblog.index.ftl
.../src/main/webapp/WEB-INF/template/joblog/joblog.index.ftl
+0
-6
joblog.index.1.js
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js
+0
-6
XxlJobLogDaoTest.java
...src/test/java/com/xxl/job/admin/dao/XxlJobLogDaoTest.java
+0
-2
没有找到文件。
doc/XXL-JOB官方文档.md
浏览文件 @
ae7fe92f
...
...
@@ -1238,6 +1238,8 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
-
22、新增左侧菜单"运行报表";
-
23、执行器手动设置IP时取消绑定Host的操作,该IP仅供执行器注册使用;修复指定外网IP时无法绑定执行器Host的问题;
-
24、取消父子任务不可重复的限制,支持循环任务触发等特殊场景;
-
25、任务调度备注中标注任务触发类型,如Cron触发、父任务触发、API触发等等,方便排查调度日志;
-
26、【迭代中】分片任务失败重试优化,仅重试当前失败的分片;
### TODO LIST
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java
浏览文件 @
ae7fe92f
...
...
@@ -4,6 +4,7 @@ import com.xxl.job.admin.core.model.XxlJobGroup;
import
com.xxl.job.admin.core.model.XxlJobInfo
;
import
com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum
;
import
com.xxl.job.admin.core.thread.JobTriggerPoolHelper
;
import
com.xxl.job.admin.core.util.I18nUtil
;
import
com.xxl.job.admin.dao.XxlJobGroupDao
;
import
com.xxl.job.admin.service.XxlJobService
;
import
com.xxl.job.core.biz.model.ReturnT
;
...
...
@@ -90,7 +91,7 @@ public class JobInfoController {
@RequestMapping
(
"/trigger"
)
@ResponseBody
public
ReturnT
<
String
>
triggerJob
(
int
id
)
{
JobTriggerPoolHelper
.
trigger
(
id
,
-
1
);
JobTriggerPoolHelper
.
trigger
(
id
,
-
1
,
I18nUtil
.
getString
(
"jobconf_trigger_type_manual"
)
);
return
ReturnT
.
SUCCESS
;
}
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
浏览文件 @
ae7fe92f
...
...
@@ -11,8 +11,6 @@ import com.xxl.job.admin.dao.XxlJobLogDao;
import
com.xxl.job.core.biz.ExecutorBiz
;
import
com.xxl.job.core.biz.model.LogResult
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.glue.GlueTypeEnum
;
import
com.xxl.job.core.rpc.netcom.NetComClientProxy
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.time.DateUtils
;
import
org.slf4j.Logger
;
...
...
@@ -52,7 +50,6 @@ public class JobLogController {
// 执行器列表
List
<
XxlJobGroup
>
jobGroupList
=
xxlJobGroupDao
.
findAll
();
model
.
addAttribute
(
"JobGroupList"
,
jobGroupList
);
model
.
addAttribute
(
"GlueTypeEnum"
,
GlueTypeEnum
.
values
());
// 任务
if
(
jobId
>
0
)
{
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
浏览文件 @
ae7fe92f
package
com
.
xxl
.
job
.
admin
.
core
.
jobbean
;
import
com.xxl.job.admin.core.thread.JobTriggerPoolHelper
;
import
com.xxl.job.admin.core.util.I18nUtil
;
import
org.quartz.JobExecutionContext
;
import
org.quartz.JobExecutionException
;
import
org.quartz.JobKey
;
...
...
@@ -27,7 +28,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
// trigger
//XxlJobTrigger.trigger(jobId);
JobTriggerPoolHelper
.
trigger
(
jobId
,
-
1
);
JobTriggerPoolHelper
.
trigger
(
jobId
,
-
1
,
I18nUtil
.
getString
(
"jobconf_trigger_type_cron"
)
);
}
}
\ No newline at end of file
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
浏览文件 @
ae7fe92f
...
...
@@ -65,8 +65,25 @@ public class JobFailMonitorHelper {
}
else
/*if (IJobHandler.FAIL.getCode() == log.getTriggerCode()
|| IJobHandler.FAIL.getCode() == log.getHandleCode()
|| IJobHandler.FAIL_RETRY.getCode() == log.getHandleCode() )*/
{
// job fail,
failAlarm
(
log
);
// 1、fail retry
XxlJobInfo
info
=
XxlJobDynamicScheduler
.
xxlJobInfoDao
.
loadById
(
log
.
getJobId
());
if
(
log
.
getExecutorFailRetryCount
()
>
0
)
{
// TODO,分片任务失败重试优化,仅重试失败分片
JobTriggerPoolHelper
.
trigger
(
log
.
getJobId
(),
(
log
.
getExecutorFailRetryCount
()-
1
),
I18nUtil
.
getString
(
"jobconf_trigger_type_retry"
));
String
retryMsg
=
"<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"
+
I18nUtil
.
getString
(
"jobconf_fail_trigger_retry"
)
+
"<<<<<<<<<<< </span><br>"
;
log
.
setTriggerMsg
(
log
.
getTriggerMsg
()
+
retryMsg
);
XxlJobDynamicScheduler
.
xxlJobLogDao
.
updateTriggerInfo
(
log
);
}
// 2、fail alarm
failAlarm
(
info
,
log
);
logger
.
info
(
">>>>>>>>>>> job monitor, job fail, JobLogId:{}"
,
jobLogId
);
}
/* else {
JobFailMonitorHelper.monitor(jobLogId);
...
...
@@ -89,7 +106,9 @@ public class JobFailMonitorHelper {
XxlJobLog
log
=
XxlJobDynamicScheduler
.
xxlJobLogDao
.
load
(
jobLogId
);
if
(
ReturnT
.
FAIL_CODE
==
log
.
getTriggerCode
()||
ReturnT
.
FAIL_CODE
==
log
.
getHandleCode
())
{
// job fail,
failAlarm
(
log
);
XxlJobInfo
info
=
XxlJobDynamicScheduler
.
xxlJobInfoDao
.
loadById
(
log
.
getJobId
());
failAlarm
(
info
,
log
);
logger
.
info
(
">>>>>>>>>>> job monitor last, job fail, JobLogId:{}"
,
jobLogId
);
}
}
...
...
@@ -148,10 +167,9 @@ public class JobFailMonitorHelper {
*
* @param jobLog
*/
private
void
failAlarm
(
XxlJobLog
jobLog
){
private
void
failAlarm
(
XxlJob
Info
info
,
XxlJob
Log
jobLog
){
// send monitor email
XxlJobInfo
info
=
XxlJobDynamicScheduler
.
xxlJobInfoDao
.
loadById
(
jobLog
.
getJobId
());
if
(
info
!=
null
&&
info
.
getAlarmEmail
()!=
null
&&
info
.
getAlarmEmail
().
trim
().
length
()>
0
)
{
String
alarmContent
=
"Alarm Job LogId="
+
jobLog
.
getId
();
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
浏览文件 @
ae7fe92f
...
...
@@ -28,11 +28,11 @@ public class JobTriggerPoolHelper {
new
ThreadPoolExecutor
.
CallerRunsPolicy
());
public
void
addTrigger
(
final
int
jobId
,
final
int
failRetryCount
){
public
void
addTrigger
(
final
int
jobId
,
final
int
failRetryCount
,
final
String
type
){
triggerPool
.
execute
(
new
Runnable
()
{
@Override
public
void
run
()
{
XxlJobTrigger
.
trigger
(
jobId
,
failRetryCount
);
XxlJobTrigger
.
trigger
(
jobId
,
failRetryCount
,
type
);
}
});
}
...
...
@@ -55,8 +55,8 @@ public class JobTriggerPoolHelper {
* <0: use param from job info config
*
*/
public
static
void
trigger
(
int
jobId
,
int
failRetryCount
)
{
helper
.
addTrigger
(
jobId
,
failRetryCount
);
public
static
void
trigger
(
int
jobId
,
int
failRetryCount
,
String
type
)
{
helper
.
addTrigger
(
jobId
,
failRetryCount
,
type
);
}
public
static
void
toStop
(){
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
浏览文件 @
ae7fe92f
...
...
@@ -6,7 +6,6 @@ import com.xxl.job.admin.core.model.XxlJobLog;
import
com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum
;
import
com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.admin.core.thread.JobFailMonitorHelper
;
import
com.xxl.job.admin.core.thread.JobTriggerPoolHelper
;
import
com.xxl.job.admin.core.util.I18nUtil
;
import
com.xxl.job.core.biz.ExecutorBiz
;
import
com.xxl.job.core.biz.model.ReturnT
;
...
...
@@ -36,7 +35,7 @@ public class XxlJobTrigger {
* <0: use param from job info config
*
*/
public
static
void
trigger
(
int
jobId
,
int
failRetryCount
)
{
public
static
void
trigger
(
int
jobId
,
int
failRetryCount
,
String
type
)
{
// load data
XxlJobInfo
jobInfo
=
XxlJobDynamicScheduler
.
xxlJobInfoDao
.
loadById
(
jobId
);
// job info
...
...
@@ -57,7 +56,6 @@ public class XxlJobTrigger {
// broadcast
if
(
ExecutorRouteStrategyEnum
.
SHARDING_BROADCAST
==
executorRouteStrategyEnum
&&
CollectionUtils
.
isNotEmpty
(
addressList
))
{
boolean
onceFailed
=
false
;
for
(
int
i
=
0
;
i
<
addressList
.
size
();
i
++)
{
String
address
=
addressList
.
get
(
i
);
...
...
@@ -77,6 +75,7 @@ public class XxlJobTrigger {
ReturnT
<
String
>
triggerResult
=
new
ReturnT
<
String
>(
null
);
StringBuffer
triggerMsgSb
=
new
StringBuffer
();
triggerMsgSb
.
append
(
I18nUtil
.
getString
(
"jobconf_trigger_type"
)).
append
(
":"
).
append
(
type
);
triggerMsgSb
.
append
(
I18nUtil
.
getString
(
"jobconf_trigger_admin_adress"
)).
append
(
":"
).
append
(
IpUtil
.
getIp
());
triggerMsgSb
.
append
(
"<br>"
).
append
(
I18nUtil
.
getString
(
"jobconf_trigger_exe_regtype"
)).
append
(
":"
)
.
append
(
(
group
.
getAddressType
()
==
0
)?
I18nUtil
.
getString
(
"jobgroup_field_addressType_0"
):
I18nUtil
.
getString
(
"jobgroup_field_addressType_1"
)
);
...
...
@@ -106,24 +105,13 @@ public class XxlJobTrigger {
triggerResult
=
runExecutor
(
triggerParam
,
address
);
// update03
triggerMsgSb
.
append
(
"<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>"
+
I18nUtil
.
getString
(
"jobconf_trigger_run"
)
+
"<<<<<<<<<<< </span><br>"
).
append
(
triggerResult
.
getMsg
());
// 4、fail retry)
if
(
triggerResult
.
getCode
()!=
ReturnT
.
SUCCESS_CODE
)
{
onceFailed
=
true
;
}
if
(
addressList
.
size
()==
i
+
1
&&
onceFailed
&&
finalFailRetryCount
>
0
)
{
// each trigger only retry once
JobTriggerPoolHelper
.
trigger
(
jobId
,
(
finalFailRetryCount
-
1
));
triggerMsgSb
.
append
(
"<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"
+
I18nUtil
.
getString
(
"jobconf_fail_trigger_retry"
)
+
"<<<<<<<<<<< </span><br>"
);
}
// 5、save trigger-info
// 4、save trigger-info
jobLog
.
setExecutorAddress
(
triggerResult
.
getContent
());
jobLog
.
setTriggerCode
(
triggerResult
.
getCode
());
jobLog
.
setTriggerMsg
(
triggerMsgSb
.
toString
());
XxlJobDynamicScheduler
.
xxlJobLogDao
.
updateTriggerInfo
(
jobLog
);
//
6
、monitor trigger
//
5
、monitor trigger
JobFailMonitorHelper
.
monitor
(
jobLog
.
getId
());
logger
.
debug
(
">>>>>>>>>>> xxl-job trigger end, jobId:{}"
,
jobLog
.
getId
());
...
...
@@ -182,19 +170,13 @@ public class XxlJobTrigger {
}
// 4、fail retry
if
(
triggerResult
.
getCode
()!=
ReturnT
.
SUCCESS_CODE
&&
finalFailRetryCount
>
0
)
{
JobTriggerPoolHelper
.
trigger
(
jobId
,
(
finalFailRetryCount
-
1
));
triggerMsgSb
.
append
(
"<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"
+
I18nUtil
.
getString
(
"jobconf_fail_trigger_retry"
)
+
"<<<<<<<<<<< </span><br>"
);
}
// 5、save trigger-info
// 4、save trigger-info
jobLog
.
setExecutorAddress
(
triggerResult
.
getContent
());
jobLog
.
setTriggerCode
(
triggerResult
.
getCode
());
jobLog
.
setTriggerMsg
(
triggerMsgSb
.
toString
());
XxlJobDynamicScheduler
.
xxlJobLogDao
.
updateTriggerInfo
(
jobLog
);
//
6
、monitor trigger
//
5
、monitor trigger
JobFailMonitorHelper
.
monitor
(
jobLog
.
getId
());
logger
.
debug
(
">>>>>>>>>>> xxl-job trigger end, jobId:{}"
,
jobLog
.
getId
());
}
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
浏览文件 @
ae7fe92f
...
...
@@ -7,7 +7,6 @@ import com.xxl.job.admin.core.util.I18nUtil;
import
com.xxl.job.admin.dao.XxlJobInfoDao
;
import
com.xxl.job.admin.dao.XxlJobLogDao
;
import
com.xxl.job.admin.dao.XxlJobRegistryDao
;
import
com.xxl.job.admin.service.XxlJobService
;
import
com.xxl.job.core.biz.AdminBiz
;
import
com.xxl.job.core.biz.model.HandleCallbackParam
;
import
com.xxl.job.core.biz.model.RegistryParam
;
...
...
@@ -36,8 +35,6 @@ public class AdminBizImpl implements AdminBiz {
private
XxlJobInfoDao
xxlJobInfoDao
;
@Resource
private
XxlJobRegistryDao
xxlJobRegistryDao
;
@Resource
private
XxlJobService
xxlJobService
;
@Override
...
...
@@ -73,7 +70,7 @@ public class AdminBizImpl implements AdminBiz {
int
childJobId
=
(
StringUtils
.
isNotBlank
(
childJobIds
[
i
])
&&
StringUtils
.
isNumeric
(
childJobIds
[
i
]))?
Integer
.
valueOf
(
childJobIds
[
i
]):-
1
;
if
(
childJobId
>
0
)
{
JobTriggerPoolHelper
.
trigger
(
childJobId
,
0
);
JobTriggerPoolHelper
.
trigger
(
childJobId
,
0
,
I18nUtil
.
getString
(
"jobconf_trigger_type_parent"
)
);
ReturnT
<
String
>
triggerChildResult
=
ReturnT
.
SUCCESS
;
// add msg
...
...
@@ -92,16 +89,6 @@ public class AdminBizImpl implements AdminBiz {
}
}
}
else
{
if
(
log
.
getExecutorFailRetryCount
()
>
0
)
{
int
nextFailRetryCount
=
log
.
getExecutorFailRetryCount
()-
1
;
// TODO,广播路由的失败重试,会导致重试暴增,需要优化
JobTriggerPoolHelper
.
trigger
(
log
.
getJobId
(),
nextFailRetryCount
);
callbackMsg
=
"<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"
+
I18nUtil
.
getString
(
"jobconf_fail_handle_retry"
)
+
"<<<<<<<<<<< </span><br>"
;
}
}
// handle msg
...
...
@@ -142,7 +129,7 @@ public class AdminBizImpl implements AdminBiz {
@Override
public
ReturnT
<
String
>
triggerJob
(
int
jobId
)
{
JobTriggerPoolHelper
.
trigger
(
jobId
,
-
1
);
JobTriggerPoolHelper
.
trigger
(
jobId
,
-
1
,
I18nUtil
.
getString
(
"jobconf_trigger_type_api"
)
);
return
ReturnT
.
SUCCESS
;
}
...
...
xxl-job-admin/src/main/resources/i18n/message.properties
浏览文件 @
ae7fe92f
...
...
@@ -224,6 +224,12 @@ jobconf_trigger_run=触发调度
jobconf_trigger_child_run
=
触发子任务
jobconf_callback_child_msg1
=
{0}/{1} [任务ID={2}], 触发{3}, 触发备注: {4} <br>
jobconf_callback_child_msg2
=
{0}/{1} [任务ID={2}], 触发失败, 触发备注: 任务ID格式错误 <br>
jobconf_trigger_type
=
任务触发类型
jobconf_trigger_type_cron
=
Cron触发
jobconf_trigger_type_manual
=
手动触发
jobconf_trigger_type_parent
=
父任务触发
jobconf_trigger_type_api
=
API触发
jobconf_trigger_type_retry
=
失败重试触发
## help
job_help
=
使用教程
...
...
xxl-job-admin/src/main/resources/i18n/message_en.properties
浏览文件 @
ae7fe92f
...
...
@@ -224,6 +224,12 @@ jobconf_trigger_run=Trigger Job
jobconf_trigger_child_run
=
Trigger child job
jobconf_callback_child_msg1
=
{0}/{1} [Job ID={2}], Trigger {3}, Trigger msg: {4} <br>
jobconf_callback_child_msg2
=
{0}/{1} [Job ID={2}], Trigger Fail, Trigger msg: Job ID is illegal <br>
jobconf_trigger_type
=
Job trigger type
jobconf_trigger_type_cron
=
Cron trigger
jobconf_trigger_type_manual
=
Manual trigger
jobconf_trigger_type_parent
=
Parent job trigger
jobconf_trigger_type_api
=
Api trigger
jobconf_trigger_type_retry
=
Fail retry trigger
## help
job_help
=
Tutorial
...
...
xxl-job-admin/src/main/webapp/WEB-INF/template/joblog/joblog.index.ftl
浏览文件 @
ae7fe92f
...
...
@@ -167,12 +167,6 @@
</div>
<
@
netCommon
.
commonScript
/>
<script>
var
GlueTypeEnum
=
{};
<
#
list
GlueTypeEnum
as
item
>
GlueTypeEnum
[
'${item}'
]
=
'${item.desc}'
;
<
/#list>
</script>
<!-- DataTables -->
<script
src=
"${request.contextPath}/static/adminlte/plugins/datatables/jquery.dataTables.min.js"
></script>
<script
src=
"${request.contextPath}/static/adminlte/plugins/datatables/dataTables.bootstrap.min.js"
></script>
...
...
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js
浏览文件 @
ae7fe92f
...
...
@@ -98,14 +98,8 @@ $(function() {
"width"
:
'10%'
,
"render"
:
function
(
data
,
type
,
row
)
{
var
glueTypeTitle
=
GlueTypeEnum
[
row
.
glueType
];
if
(
row
.
executorHandler
)
{
glueTypeTitle
=
glueTypeTitle
+
":"
+
row
.
executorHandler
;
}
var
temp
=
''
;
temp
+=
I18n
.
joblog_field_executorAddress
+
':'
+
(
row
.
executorAddress
?
row
.
executorAddress
:
''
);
temp
+=
'<br>'
+
I18n
.
jobinfo_field_gluetype
+
':'
+
glueTypeTitle
;
temp
+=
'<br>'
+
I18n
.
jobinfo_field_executorparam
+
':'
+
row
.
executorParam
;
return
'<a class="logTips" href="javascript:;" >'
+
row
.
jobId
+
'<span style="display:none;">'
+
temp
+
'</span></a>'
;
...
...
xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobLogDaoTest.java
浏览文件 @
ae7fe92f
package
com
.
xxl
.
job
.
admin
.
dao
;
import
com.xxl.job.admin.core.model.XxlJobLog
;
import
com.xxl.job.admin.dao.XxlJobLogDao
;
import
org.apache.commons.lang3.time.DateUtils
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
...
...
@@ -32,7 +31,6 @@ public class XxlJobLogDaoTest {
int
ret1
=
xxlJobLogDao
.
save
(
log
);
XxlJobLog
dto
=
xxlJobLogDao
.
load
(
log
.
getId
());
log
.
setGlueType
(
"1"
);
log
.
setTriggerTime
(
new
Date
());
log
.
setTriggerCode
(
1
);
log
.
setTriggerMsg
(
"1"
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论