Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
67fc5a18
提交
67fc5a18
authored
9月 23, 2018
作者:
xuxueli
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
任务触发时支持动态传参,调度中心与API服务均提供提供动态参数功能
上级
dea702f6
隐藏空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
106 行增加
和
20 行删除
+106
-20
XXL-JOB官方文档.md
doc/XXL-JOB官方文档.md
+3
-4
JobInfoController.java
.../java/com/xxl/job/admin/controller/JobInfoController.java
+7
-2
RemoteHttpJobBean.java
...ava/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
+2
-1
JobFailMonitorHelper.java
...a/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
+1
-1
JobTriggerPoolHelper.java
...a/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
+9
-5
XxlJobTrigger.java
...in/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
+9
-2
AdminBizImpl.java
...ain/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
+1
-1
jobinfo.index.ftl
...rc/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl
+29
-0
jobinfo.index.1.js
xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js
+45
-4
没有找到文件。
doc/XXL-JOB官方文档.md
浏览文件 @
67fc5a18
...
...
@@ -1283,7 +1283,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
-
33、修复表字段 “t.order”与数据库关键字冲突查询失败的问题,
-
34、调度中心提供API服务,支持通过API服务对任务进行查询、新增、更新、启停等操作;
-
35、分片任务失败重试优化,仅重试当前失败的分片;
-
36、任务
参数数据框调整,手动触发时支持动态输入参数
;
-
36、任务
触发时支持动态传参,调度中心与API服务均提供提供动态参数功能
;
### TODO LIST
...
...
@@ -1298,7 +1298,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
-
9、执行器Log清理功能:调度中心Log删除时同步删除执行器中的Log文件;
-
10、Bean模式任务,JobHandler自动从执行器中查询展示为下拉框,选择后自动填充任务名称等属性;
-
11、API事件触发类型任务(更类似MQ消息)支持"动态传参、延时消费";该类型任务不走Quartz,单独建立MQ消息表,调度中心竞争触发;待定,该功能与 XXL-MQ 冲突,该场景建议用后者;
-
12、
API任务触发时支持动态传参
;
-
12、
调度线程池改为协程方式实现,大幅降低系统内存消耗
;
-
13、任务依赖增强,新增任务类型 "流程任务",流程节点可挂载普通类型任务,承担任务依赖功能。现有子任务模型取消;需要考虑任务依赖死循环问题;
-
14、任务告警逻辑调整:任务调度,以及任务回调失败时,均推送监控队列。后期考虑通过任务Log字段控制告警状态;
-
15、新增任务默认运行状态,任务更新时运行状态保持不变;
...
...
@@ -1306,8 +1306,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
-
17、注册中心支持扩展,除默认基于DB之外,支持扩展接入第三方注册中心如zk、eureka等;
-
18、流程任务,支持参数传递;
-
19、SimpleTrigger 支持;
-
20、调度线程池改为协程方式实现,大幅降低系统内存消耗;
-
21、Release发布时,一同发布调度中心安装包,真正实现开箱即用;
-
20、Release发布时,一同发布调度中心安装包,真正实现开箱即用;
## 七、其他
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java
浏览文件 @
67fc5a18
...
...
@@ -91,8 +91,13 @@ public class JobInfoController {
@RequestMapping
(
"/trigger"
)
@ResponseBody
//@PermessionLimit(limit = false)
public
ReturnT
<
String
>
triggerJob
(
int
id
)
{
JobTriggerPoolHelper
.
trigger
(
id
,
TriggerTypeEnum
.
MANUAL
,
-
1
,
null
);
public
ReturnT
<
String
>
triggerJob
(
int
id
,
String
executorParam
)
{
// force cover job param
if
(
executorParam
==
null
)
{
executorParam
=
""
;
}
JobTriggerPoolHelper
.
trigger
(
id
,
TriggerTypeEnum
.
MANUAL
,
-
1
,
null
,
executorParam
);
return
ReturnT
.
SUCCESS
;
}
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
浏览文件 @
67fc5a18
...
...
@@ -29,7 +29,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
// trigger
//XxlJobTrigger.trigger(jobId);
JobTriggerPoolHelper
.
trigger
(
jobId
,
TriggerTypeEnum
.
CRON
,
-
1
,
null
);
JobTriggerPoolHelper
.
trigger
(
jobId
,
TriggerTypeEnum
.
CRON
,
-
1
,
null
,
null
);
}
}
\ No newline at end of file
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
浏览文件 @
67fc5a18
...
...
@@ -73,7 +73,7 @@ public class JobFailMonitorHelper {
XxlJobInfo
info
=
XxlJobDynamicScheduler
.
xxlJobInfoDao
.
loadById
(
log
.
getJobId
());
if
(
log
.
getExecutorFailRetryCount
()
>
0
)
{
JobTriggerPoolHelper
.
trigger
(
log
.
getJobId
(),
TriggerTypeEnum
.
RETRY
,
(
log
.
getExecutorFailRetryCount
()-
1
),
log
.
getExecutorShardingParam
());
JobTriggerPoolHelper
.
trigger
(
log
.
getJobId
(),
TriggerTypeEnum
.
RETRY
,
(
log
.
getExecutorFailRetryCount
()-
1
),
log
.
getExecutorShardingParam
()
,
null
);
String
retryMsg
=
"<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"
+
I18nUtil
.
getString
(
"jobconf_trigger_type_retry"
)
+
"<<<<<<<<<<< </span><br>"
;
log
.
setTriggerMsg
(
log
.
getTriggerMsg
()
+
retryMsg
);
XxlJobDynamicScheduler
.
xxlJobLogDao
.
updateTriggerInfo
(
log
);
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
浏览文件 @
67fc5a18
...
...
@@ -29,11 +29,11 @@ public class JobTriggerPoolHelper {
new
ThreadPoolExecutor
.
CallerRunsPolicy
());
public
void
addTrigger
(
final
int
jobId
,
final
TriggerTypeEnum
triggerType
,
final
int
failRetryCount
,
final
String
executorShardingParam
)
{
public
void
addTrigger
(
final
int
jobId
,
final
TriggerTypeEnum
triggerType
,
final
int
failRetryCount
,
final
String
executorShardingParam
,
final
String
executorParam
)
{
triggerPool
.
execute
(
new
Runnable
()
{
@Override
public
void
run
()
{
XxlJobTrigger
.
trigger
(
jobId
,
triggerType
,
failRetryCount
,
executorShardingParam
);
XxlJobTrigger
.
trigger
(
jobId
,
triggerType
,
failRetryCount
,
executorShardingParam
,
executorParam
);
}
});
}
...
...
@@ -50,13 +50,17 @@ public class JobTriggerPoolHelper {
/**
* @param jobId
* @param triggerType
* @param failRetryCount
* >=0: use this param
* <0: use param from job info config
*
* @param executorShardingParam
* @param executorParam
* null: use job param
* not null: cover job param
*/
public
static
void
trigger
(
int
jobId
,
TriggerTypeEnum
triggerType
,
int
failRetryCount
,
String
executorShardingParam
)
{
helper
.
addTrigger
(
jobId
,
triggerType
,
failRetryCount
,
executorShardingParam
);
public
static
void
trigger
(
int
jobId
,
TriggerTypeEnum
triggerType
,
int
failRetryCount
,
String
executorShardingParam
,
String
executorParam
)
{
helper
.
addTrigger
(
jobId
,
triggerType
,
failRetryCount
,
executorShardingParam
,
executorParam
);
}
public
static
void
toStop
()
{
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
浏览文件 @
67fc5a18
...
...
@@ -30,18 +30,25 @@ public class XxlJobTrigger {
* trigger job
*
* @param jobId
* @param triggerType
* @param failRetryCount
* >=0: use this param
* <0: use param from job info config
*
* @param executorShardingParam
* @param executorParam
* null: use job param
* not null: cover job param
*/
public
static
void
trigger
(
int
jobId
,
TriggerTypeEnum
triggerType
,
int
failRetryCount
,
String
executorShardingParam
)
{
public
static
void
trigger
(
int
jobId
,
TriggerTypeEnum
triggerType
,
int
failRetryCount
,
String
executorShardingParam
,
String
executorParam
)
{
// load data
XxlJobInfo
jobInfo
=
XxlJobDynamicScheduler
.
xxlJobInfoDao
.
loadById
(
jobId
);
if
(
jobInfo
==
null
)
{
logger
.
warn
(
">>>>>>>>>>>> trigger fail, jobId invalid,jobId={}"
,
jobId
);
return
;
}
if
(
executorParam
!=
null
)
{
jobInfo
.
setExecutorParam
(
executorParam
);
}
int
finalFailRetryCount
=
failRetryCount
>=
0
?
failRetryCount:
jobInfo
.
getExecutorFailRetryCount
();
XxlJobGroup
group
=
XxlJobDynamicScheduler
.
xxlJobGroupDao
.
load
(
jobInfo
.
getJobGroup
());
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
浏览文件 @
67fc5a18
...
...
@@ -71,7 +71,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
,
TriggerTypeEnum
.
PARENT
,
0
,
null
);
JobTriggerPoolHelper
.
trigger
(
childJobId
,
TriggerTypeEnum
.
PARENT
,
0
,
null
,
null
);
ReturnT
<
String
>
triggerChildResult
=
ReturnT
.
SUCCESS
;
// add msg
...
...
xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl
浏览文件 @
67fc5a18
...
...
@@ -380,6 +380,35 @@ exit 0
</div>
</div>
<
#
--
trigger
--
>
<div
class=
"modal fade"
id=
"jobTriggerModal"
tabindex=
"-1"
role=
"dialog"
aria-hidden=
"true"
>
<div
class=
"modal-dialog "
>
<div
class=
"modal-content"
>
<div
class=
"modal-header"
>
<h4
class=
"modal-title"
>
${I18n.jobinfo_opt_run}
</h4>
</div>
<div
class=
"modal-body"
>
<form
class=
"form-horizontal form"
role=
"form"
>
<div
class=
"form-group"
>
<label
for=
"firstname"
class=
"col-sm-2 control-label"
>
${I18n.jobinfo_field_executorparam}
<font
color=
"black"
>
*
</font></label>
<div
class=
"col-sm-10"
>
<textarea
class=
"textarea form-control"
name=
"executorParam"
placeholder=
"${I18n.system_please_input}${I18n.jobinfo_field_executorparam}"
maxlength=
"512"
style=
"height: 63px; line-height: 1.2;"
></textarea>
</div>
</div>
<hr>
<div
class=
"form-group"
>
<div
class=
"col-sm-offset-3 col-sm-6"
>
<button
type=
"button"
class=
"btn btn-primary ok"
>
${I18n.system_save}
</button>
<button
type=
"button"
class=
"btn btn-default"
data-dismiss=
"modal"
>
${I18n.system_cancel}
</button>
<input
type=
"hidden"
name=
"id"
>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<
@
netCommon
.
commonScript
/>
<!-- DataTables -->
<script
src=
"${request.contextPath}/static/adminlte/plugins/datatables/jquery.dataTables.min.js"
></script>
...
...
xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js
浏览文件 @
67fc5a18
...
...
@@ -122,7 +122,7 @@ $(function() {
// html
tableData
[
'key'
+
row
.
id
]
=
row
;
var
html
=
'<p id="'
+
row
.
id
+
'" >'
+
'<button class="btn btn-primary btn-xs job_
operate" _type="job_
trigger" type="button">'
+
I18n
.
jobinfo_opt_run
+
'</button> '
+
'<button class="btn btn-primary btn-xs job_trigger" type="button">'
+
I18n
.
jobinfo_opt_run
+
'</button> '
+
pause_resume
+
'<button class="btn btn-primary btn-xs" type="job_del" type="button" onclick="javascript:window.open(
\'
'
+
logUrl
+
'
\'
)" >'
+
I18n
.
jobinfo_opt_log
+
'</button><br> '
+
'<button class="btn btn-warning btn-xs update" type="button">'
+
I18n
.
system_opt_edit
+
'</button> '
+
...
...
@@ -195,9 +195,6 @@ $(function() {
typeName
=
I18n
.
system_opt_del
;
url
=
base_url
+
"/jobinfo/remove"
;
needFresh
=
true
;
}
else
if
(
"job_trigger"
==
type
)
{
typeName
=
I18n
.
jobinfo_opt_run
;
url
=
base_url
+
"/jobinfo/trigger"
;
}
else
{
return
;
}
...
...
@@ -246,6 +243,50 @@ $(function() {
});
});
// job trigger
$
(
"#job_list"
).
on
(
'click'
,
'.job_trigger'
,
function
()
{
var
id
=
$
(
this
).
parent
(
'p'
).
attr
(
"id"
);
var
row
=
tableData
[
'key'
+
id
];
$
(
"#jobTriggerModal .form input[name='id']"
).
val
(
row
.
id
);
$
(
"#jobTriggerModal .form textarea[name='executorParam']"
).
val
(
row
.
executorParam
);
$
(
'#jobTriggerModal'
).
modal
({
backdrop
:
false
,
keyboard
:
false
}).
modal
(
'show'
);
});
$
(
"#jobTriggerModal .ok"
).
on
(
'click'
,
function
()
{
$
.
ajax
({
type
:
'POST'
,
url
:
base_url
+
"/jobinfo/trigger"
,
data
:
{
"id"
:
$
(
"#jobTriggerModal .form input[name='id']"
).
val
(),
"executorParam"
:
$
(
"#jobTriggerModal .textarea[name='executorParam']"
).
val
()
},
dataType
:
"json"
,
success
:
function
(
data
){
if
(
data
.
code
==
200
)
{
$
(
'#jobTriggerModal'
).
modal
(
'hide'
);
layer
.
open
({
title
:
I18n
.
system_tips
,
btn
:
[
I18n
.
system_ok
],
content
:
I18n
.
jobinfo_opt_run
+
I18n
.
system_success
,
icon
:
'1'
});
}
else
{
layer
.
open
({
title
:
I18n
.
system_tips
,
btn
:
[
I18n
.
system_ok
],
content
:
(
data
.
msg
||
I18n
.
jobinfo_opt_run
+
I18n
.
system_fail
),
icon
:
'2'
});
}
}
});
});
$
(
"#jobTriggerModal"
).
on
(
'hide.bs.modal'
,
function
()
{
$
(
"#jobTriggerModal .form"
)[
0
].
reset
();
});
// add
$
(
".add"
).
click
(
function
(){
$
(
'#addModal'
).
modal
({
backdrop
:
false
,
keyboard
:
false
}).
modal
(
'show'
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论