Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
23bd08bf
提交
23bd08bf
authored
7月 20, 2016
作者:
xueli.xue
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
任务编辑界面交互调整
上级
f7ff8047
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
59 行增加
和
61 行删除
+59
-61
jobinfo.index.ftl
...rc/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl
+7
-12
jobinfo.index.1.js
xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js
+15
-17
XxlJobExecutor.java
.../java/com/xxl/job/core/executor/jetty/XxlJobExecutor.java
+11
-6
HandlerRepository.java
...main/java/com/xxl/job/core/handler/HandlerRepository.java
+24
-24
DemoJobHandler.java
...m/xxl/job/executor/service/jobhandler/DemoJobHandler.java
+2
-2
没有找到文件。
xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl
浏览文件 @
23bd08bf
...
@@ -193,14 +193,10 @@ public class DemoJobHandler extends IJobHandler {
...
@@ -193,14 +193,10 @@ public class DemoJobHandler extends IJobHandler {
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"firstname"
class=
"col-sm-2 control-label"
>
分组
<font
color=
"red"
>
*
</font></label>
<label
for=
"firstname"
class=
"col-sm-2 control-label"
>
分组
<font
color=
"red"
>
*
</font></label>
<div
class=
"col-sm-4"
>
<div
class=
"col-sm-4"
>
<select
class=
"form-control"
name=
"jobGroupTitle"
disabled
>
<input
type=
"text"
class=
"form-control"
name=
"jobGroupTitle"
maxlength=
"50"
readonly
>
<
#
list
JobGroupList
as
group
>
<option
value=
"${group}"
>
${group.desc}
</option>
</
#
list>
</select>
<input
type=
"hidden"
name=
"jobGroup"
>
<input
type=
"hidden"
name=
"jobGroup"
>
<input
type=
"hidden"
name=
"jobName"
>
<input
type=
"hidden"
name=
"jobName"
>
</div>
</div>
<label
for=
"lastname"
class=
"col-sm-2 control-label"
>
名称
<font
color=
"red"
>
*
</font></label>
<label
for=
"lastname"
class=
"col-sm-2 control-label"
>
名称
<font
color=
"red"
>
*
</font></label>
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"jobDesc"
placeholder=
"请输入“描述”"
maxlength=
"50"
></div>
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"jobDesc"
placeholder=
"请输入“描述”"
maxlength=
"50"
></div>
</div>
</div>
...
@@ -226,13 +222,12 @@ public class DemoJobHandler extends IJobHandler {
...
@@ -226,13 +222,12 @@ public class DemoJobHandler extends IJobHandler {
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"firstname"
class=
"col-sm-2 control-label"
>
任务模式
<font
color=
"red"
>
*
</font></label>
<label
for=
"firstname"
class=
"col-sm-2 control-label"
>
任务模式
<font
color=
"red"
>
*
</font></label>
<div
class=
"col-sm-4"
>
<div
class=
"col-sm-4"
>
<select
class=
"form-control"
name=
"glueSwitch"
disabled
>
<input
type=
"text"
class=
"form-control"
name=
"glueSwitchTitle"
readonly
>
<option
value=
"0"
>
BEAN模式
</option>
</div>
<option
value=
"1"
>
GLUE模式
</option>
</select>
</div>
<label
for=
"lastname"
class=
"col-sm-2 control-label"
>
JobKey
</label>
<label
for=
"lastname"
class=
"col-sm-2 control-label"
>
JobKey
</label>
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"jobKey"
placeholder=
"请输入“jobHandler”"
readonly
></div>
<div
class=
"col-sm-4"
>
<input
type=
"text"
class=
"form-control"
name=
"jobKey"
placeholder=
"请输入“jobHandler”"
readonly
>
</div>
</div>
</div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<div
class=
"col-sm-offset-3 col-sm-6"
>
<div
class=
"col-sm-offset-3 col-sm-6"
>
...
...
xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js
浏览文件 @
23bd08bf
...
@@ -91,7 +91,7 @@ $(function() {
...
@@ -91,7 +91,7 @@ $(function() {
var
codeUrl
=
base_url
+
'/jobcode?jobGroup='
+
row
.
jobGroup
+
'&jobName='
+
row
.
jobName
;
var
codeUrl
=
base_url
+
'/jobcode?jobGroup='
+
row
.
jobGroup
+
'&jobName='
+
row
.
jobName
;
codeBtn
=
'<button class="btn btn-warning btn-xs" type="button" onclick="javascript:window.open(
\'
'
+
codeUrl
+
'
\'
)" >GLUE</button> '
codeBtn
=
'<button class="btn btn-warning btn-xs" type="button" onclick="javascript:window.open(
\'
'
+
codeUrl
+
'
\'
)" >GLUE</button> '
}
}
var
html
=
'<p id="'
+
row
.
id
+
'" '
+
var
html
=
'<p id="'
+
row
.
id
+
'" '
+
' jobGroup="'
+
row
.
jobGroup
+
'" '
+
' jobGroup="'
+
row
.
jobGroup
+
'" '
+
' jobName="'
+
row
.
jobName
+
'" '
+
' jobName="'
+
row
.
jobName
+
'" '
+
...
@@ -303,25 +303,23 @@ $(function() {
...
@@ -303,25 +303,23 @@ $(function() {
$
(
"#updateModal .form input[name='alarmThreshold']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"alarmThreshold"
));
$
(
"#updateModal .form input[name='alarmThreshold']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"alarmThreshold"
));
// job group selected
// job group selected
$
(
"#updateModal .form select[name='jobGroupTitle']"
).
find
(
"option[value='"
+
$
(
this
).
parent
(
'p'
).
attr
(
"jobGroup"
)
+
"']"
).
attr
(
"selected"
,
true
);
var
jobGroupTitle
=
$
(
"#addModal .form select[name='jobGroup']"
).
find
(
"option[value='"
+
$
(
this
).
parent
(
'p'
).
attr
(
"jobGroup"
)
+
"']"
).
text
();
$
(
"#updateModal .form input[name='jobGroupTitle']"
).
val
(
jobGroupTitle
);
// job group selected
$
(
"#updateModal .form select[name='glueSwitch']"
).
find
(
"option[value='"
+
$
(
this
).
parent
(
'p'
).
attr
(
"glueSwitch"
)
+
"']"
).
attr
(
"selected"
,
true
);
// generate job key
// glueSwitch and jobKey
$
(
"#updateModal .form input[name='jobKey']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"jobGroup"
)
+
"_"
+
$
(
this
).
parent
(
'p'
).
attr
(
"jobName"
)
);
var
glueSwitchTitle
;
var
jobKey
;
// GLUE check
if
(
$
(
this
).
parent
(
'p'
).
attr
(
"glueSwitch"
)
==
0
)
{
var
$glueSwitch
=
$
(
"#updateModal .form input[name='glueSwitch']"
);
glueSwitchTitle
=
"BEAN模式"
;
var
$executorHandler
=
$
(
"#updateModal .form input[name='executorHandler']"
);
jobKey
=
$
(
this
).
parent
(
'p'
).
attr
(
"jobGroup"
)
+
"_"
+
$
(
this
).
parent
(
'p'
).
attr
(
"jobName"
);
if
(
$glueSwitch
.
val
()
!=
0
)
{
$executorHandler
.
attr
(
"readonly"
,
"readonly"
);
$
(
"#updateModal .form .ifGLUE"
).
attr
(
"checked"
,
true
);
}
else
{
}
else
{
$executorHandler
.
removeAttr
(
"readonly"
)
;
glueSwitchTitle
=
"GLUE模式"
;
$
(
"#updateModal .form .ifGLUE"
).
attr
(
"checked"
,
false
)
;
jobKey
=
"无"
;
}
}
$
(
"#updateModal .form input[name='glueSwitchTitle']"
).
val
(
glueSwitchTitle
);
$
(
"#updateModal .form input[name='jobKey']"
).
val
(
jobKey
);
// show
$
(
'#updateModal'
).
modal
({
backdrop
:
false
,
keyboard
:
false
}).
modal
(
'show'
);
$
(
'#updateModal'
).
modal
({
backdrop
:
false
,
keyboard
:
false
}).
modal
(
'show'
);
});
});
var
updateModalValidate
=
$
(
"#updateModal .form"
).
validate
({
var
updateModalValidate
=
$
(
"#updateModal .form"
).
validate
({
...
...
xxl-job-core/src/main/java/com/xxl/job/core/executor/jetty/XxlJobExecutor.java
浏览文件 @
23bd08bf
package
com
.
xxl
.
job
.
core
.
executor
.
jetty
;
package
com
.
xxl
.
job
.
core
.
executor
.
jetty
;
import
java.util.
Map
;
import
java.util.
*
;
import
org.eclipse.jetty.server.Connector
;
import
org.eclipse.jetty.server.Connector
;
import
org.eclipse.jetty.server.Handler
;
import
org.eclipse.jetty.server.Handler
;
...
@@ -88,11 +88,16 @@ public class XxlJobExecutor implements ApplicationContextAware {
...
@@ -88,11 +88,16 @@ public class XxlJobExecutor implements ApplicationContextAware {
Map
<
String
,
Object
>
serviceBeanMap
=
XxlJobExecutor
.
applicationContext
.
getBeansWithAnnotation
(
JobHander
.
class
);
Map
<
String
,
Object
>
serviceBeanMap
=
XxlJobExecutor
.
applicationContext
.
getBeansWithAnnotation
(
JobHander
.
class
);
if
(
serviceBeanMap
!=
null
&&
serviceBeanMap
.
size
()>
0
)
{
if
(
serviceBeanMap
!=
null
&&
serviceBeanMap
.
size
()>
0
)
{
for
(
Object
serviceBean
:
serviceBeanMap
.
values
())
{
for
(
Object
serviceBean
:
serviceBeanMap
.
values
())
{
String
jobName
=
serviceBean
.
getClass
().
getAnnotation
(
JobHander
.
class
).
value
();
if
(
serviceBean
instanceof
IJobHandler
){
if
(
jobName
!=
null
&&
jobName
.
trim
().
length
()>
0
&&
serviceBean
instanceof
IJobHandler
)
{
String
jobKeys
=
serviceBean
.
getClass
().
getAnnotation
(
JobHander
.
class
).
value
();
IJobHandler
handler
=
(
IJobHandler
)
serviceBean
;
if
(
jobKeys
!=
null
&&
jobKeys
.
trim
().
length
()>
0
)
{
HandlerRepository
.
regist
(
jobName
,
handler
);
Set
<
String
>
jobKeySet
=
new
HashSet
<
String
>(
Arrays
.
asList
(
jobKeys
.
split
(
","
)));
}
for
(
String
jobKey
:
jobKeySet
)
{
IJobHandler
handler
=
(
IJobHandler
)
serviceBean
;
HandlerRepository
.
regist
(
jobKey
,
handler
);
}
}
}
}
}
}
}
}
}
...
...
xxl-job-core/src/main/java/com/xxl/job/core/handler/HandlerRepository.java
浏览文件 @
23bd08bf
...
@@ -102,7 +102,6 @@ public class HandlerRepository {
...
@@ -102,7 +102,6 @@ public class HandlerRepository {
callback
.
setMsg
(
"JOB_GROUP or JOB_NAME is null."
);
callback
.
setMsg
(
"JOB_GROUP or JOB_NAME is null."
);
return
JacksonUtil
.
writeValueAsString
(
callback
);
return
JacksonUtil
.
writeValueAsString
(
callback
);
}
}
String
jobKey
=
job_group
.
concat
(
"_"
).
concat
(
job_name
);
// glue switch
// glue switch
String
handler_glue_switch
=
_param
.
get
(
HandlerParamEnum
.
GLUE_SWITCH
.
name
());
String
handler_glue_switch
=
_param
.
get
(
HandlerParamEnum
.
GLUE_SWITCH
.
name
());
...
@@ -111,7 +110,8 @@ public class HandlerRepository {
...
@@ -111,7 +110,8 @@ public class HandlerRepository {
return
JacksonUtil
.
writeValueAsString
(
callback
);
return
JacksonUtil
.
writeValueAsString
(
callback
);
}
}
HandlerThread
handlerThread
=
handlerTreadMap
.
get
(
jobKey
);;
String
jobKey
=
job_group
.
concat
(
"_"
).
concat
(
job_name
);
HandlerThread
handlerThread
=
handlerTreadMap
.
get
(
jobKey
);
if
(
"0"
.
equals
(
handler_glue_switch
))
{
if
(
"0"
.
equals
(
handler_glue_switch
))
{
// bean model
// bean model
if
(
handlerThread
==
null
)
{
if
(
handlerThread
==
null
)
{
...
@@ -129,27 +129,6 @@ public class HandlerRepository {
...
@@ -129,27 +129,6 @@ public class HandlerRepository {
// push data to queue
// push data to queue
handlerThread
.
pushData
(
_param
);
handlerThread
.
pushData
(
_param
);
callback
.
setStatus
(
RemoteCallBack
.
SUCCESS
);
callback
.
setStatus
(
RemoteCallBack
.
SUCCESS
);
}
else
if
(
namespace
.
equals
(
ActionEnum
.
LOG
.
name
()))
{
String
log_id
=
_param
.
get
(
HandlerParamEnum
.
LOG_ID
.
name
());
String
log_date
=
_param
.
get
(
HandlerParamEnum
.
LOG_DATE
.
name
());
if
(
log_id
==
null
||
log_date
==
null
)
{
callback
.
setMsg
(
"LOG_ID | LOG_DATE can not be null."
);
return
JacksonUtil
.
writeValueAsString
(
callback
);
}
int
logId
=
-
1
;
Date
triggerDate
=
null
;
try
{
logId
=
Integer
.
valueOf
(
log_id
);
triggerDate
=
new
Date
(
Long
.
valueOf
(
log_date
));
}
catch
(
Exception
e
)
{
}
if
(
logId
<=
0
||
triggerDate
==
null
)
{
callback
.
setMsg
(
"LOG_ID | LOG_DATE parse error."
);
return
JacksonUtil
.
writeValueAsString
(
callback
);
}
String
logConteng
=
XxlJobFileAppender
.
readLog
(
triggerDate
,
log_id
);
callback
.
setStatus
(
RemoteCallBack
.
SUCCESS
);
callback
.
setMsg
(
logConteng
);
}
else
if
(
namespace
.
equals
(
ActionEnum
.
KILL
.
name
()))
{
}
else
if
(
namespace
.
equals
(
ActionEnum
.
KILL
.
name
()))
{
// generate jobKey
// generate jobKey
String
job_group
=
_param
.
get
(
HandlerParamEnum
.
JOB_GROUP
.
name
());
String
job_group
=
_param
.
get
(
HandlerParamEnum
.
JOB_GROUP
.
name
());
...
@@ -171,7 +150,28 @@ public class HandlerRepository {
...
@@ -171,7 +150,28 @@ public class HandlerRepository {
}
else
{
}
else
{
callback
.
setMsg
(
"handler for jobKey=["
+
jobKey
+
"] not found."
);
callback
.
setMsg
(
"handler for jobKey=["
+
jobKey
+
"] not found."
);
}
}
}
else
if
(
namespace
.
equals
(
ActionEnum
.
LOG
.
name
()))
{
String
log_id
=
_param
.
get
(
HandlerParamEnum
.
LOG_ID
.
name
());
String
log_date
=
_param
.
get
(
HandlerParamEnum
.
LOG_DATE
.
name
());
if
(
log_id
==
null
||
log_date
==
null
)
{
callback
.
setMsg
(
"LOG_ID | LOG_DATE can not be null."
);
return
JacksonUtil
.
writeValueAsString
(
callback
);
}
int
logId
=
-
1
;
Date
triggerDate
=
null
;
try
{
logId
=
Integer
.
valueOf
(
log_id
);
triggerDate
=
new
Date
(
Long
.
valueOf
(
log_date
));
}
catch
(
Exception
e
)
{
}
if
(
logId
<=
0
||
triggerDate
==
null
)
{
callback
.
setMsg
(
"LOG_ID | LOG_DATE parse error."
);
return
JacksonUtil
.
writeValueAsString
(
callback
);
}
String
logConteng
=
XxlJobFileAppender
.
readLog
(
triggerDate
,
log_id
);
callback
.
setStatus
(
RemoteCallBack
.
SUCCESS
);
callback
.
setMsg
(
logConteng
);
}
else
if
(
namespace
.
equals
(
ActionEnum
.
BEAT
.
name
()))
{
}
else
if
(
namespace
.
equals
(
ActionEnum
.
BEAT
.
name
()))
{
callback
.
setStatus
(
RemoteCallBack
.
SUCCESS
);
callback
.
setStatus
(
RemoteCallBack
.
SUCCESS
);
callback
.
setMsg
(
null
);
callback
.
setMsg
(
null
);
...
...
xxl-job-executor-example/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java
浏览文件 @
23bd08bf
...
@@ -16,11 +16,11 @@ import com.xxl.job.core.handler.annotation.JobHander;
...
@@ -16,11 +16,11 @@ import com.xxl.job.core.handler.annotation.JobHander;
* 开发步骤:
* 开发步骤:
* 1、继承 “IJobHandler” ;
* 1、继承 “IJobHandler” ;
* 2、装配到Spring,例如加 “@Service” 注解;
* 2、装配到Spring,例如加 “@Service” 注解;
* 3、加 “@JobHander” 注解,
自定义属性name的值;name值在配置新任务是使用;
* 3、加 “@JobHander” 注解,
注解value值为新增任务生成的JobKey的值;多个JobKey用逗号分割;
*
*
* @author xuxueli 2015-12-19 19:43:36
* @author xuxueli 2015-12-19 19:43:36
*/
*/
@JobHander
(
value
=
"defaults_2016071922
22270796
"
)
@JobHander
(
value
=
"defaults_2016071922
56270689,defaults_201607192256270689
"
)
@Service
@Service
public
class
DemoJobHandler
extends
IJobHandler
{
public
class
DemoJobHandler
extends
IJobHandler
{
private
static
transient
Logger
logger
=
LoggerFactory
.
getLogger
(
DemoJobHandler
.
class
);
private
static
transient
Logger
logger
=
LoggerFactory
.
getLogger
(
DemoJobHandler
.
class
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论