Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xxl_job
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
promotion
xxl_job
Commits
c1cda137
提交
c1cda137
authored
7月 19, 2016
作者:
xueli.xue
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1、去除"任务名JobName"属性,"描述"改为"名称"属性,"任务名"改为"分组"属性;
2、去除"Jobhandler"属性,新增JobKey,功能同原"JobHander属性",但是不支持修改; 3、去除"GLUE模式"复选框,改为新增的"任务模式"下拉框,且创建后不支持修改;
上级
5b8db953
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
148 行增加
和
199 行删除
+148
-199
JobInfoController.java
.../java/com/xxl/job/admin/controller/JobInfoController.java
+12
-14
JobLogController.java
...n/java/com/xxl/job/admin/controller/JobLogController.java
+16
-19
RemoteHttpJobBean.java
...ava/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
+3
-4
IXxlJobService.java
...c/main/java/com/xxl/job/admin/service/IXxlJobService.java
+3
-3
XxlJobServiceImpl.java
...ava/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
+9
-22
jobinfo.index.ftl
...rc/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl
+24
-25
jobinfo.index.1.js
xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js
+30
-47
XxlJobExecutor.java
.../java/com/xxl/job/core/executor/jetty/XxlJobExecutor.java
+1
-1
HandlerRepository.java
...main/java/com/xxl/job/core/handler/HandlerRepository.java
+48
-62
JobHander.java
...n/java/com/xxl/job/core/handler/annotation/JobHander.java
+1
-1
DemoJobHandler.java
...m/xxl/job/executor/service/jobhandler/DemoJobHandler.java
+1
-1
没有找到文件。
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java
浏览文件 @
c1cda137
package
com
.
xxl
.
job
.
admin
.
controller
;
package
com
.
xxl
.
job
.
admin
.
controller
;
import
java.util.Map
;
import
com.xxl.job.admin.core.constant.Constants.JobGroupEnum
;
import
com.xxl.job.admin.core.model.ReturnT
;
import
javax.annotation.Resource
;
import
com.xxl.job.admin.service.IXxlJobService
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.ui.Model
;
import
org.springframework.ui.Model
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
com.xxl.job.admin.core.constant.Constants.JobGroupEnum
;
import
javax.annotation.Resource
;
import
com.xxl.job.admin.core.model.ReturnT
;
import
java.util.Map
;
import
com.xxl.job.admin.service.IXxlJobService
;
/**
/**
* index controller
* index controller
...
@@ -43,22 +41,22 @@ public class JobInfoController {
...
@@ -43,22 +41,22 @@ public class JobInfoController {
@RequestMapping
(
"/add"
)
@RequestMapping
(
"/add"
)
@ResponseBody
@ResponseBody
public
ReturnT
<
String
>
add
(
String
jobGroup
,
String
jobName
,
String
jobCron
,
String
jobDesc
,
public
ReturnT
<
String
>
add
(
String
jobGroup
,
String
jobName
,
String
jobCron
,
String
jobDesc
,
String
executorAddress
,
String
executor
Handler
,
String
executorParam
,
String
executorAddress
,
String
executor
Param
,
String
author
,
String
alarmEmail
,
int
alarmThreshold
,
String
author
,
String
alarmEmail
,
int
alarmThreshold
,
int
glueSwitch
,
String
glueSource
,
String
glueRemark
)
{
int
glueSwitch
,
String
glueSource
,
String
glueRemark
)
{
return
xxlJobService
.
add
(
jobGroup
,
jobCron
,
jobDesc
,
executorAddress
,
executor
Handler
,
executor
Param
,
return
xxlJobService
.
add
(
jobGroup
,
jobCron
,
jobDesc
,
executorAddress
,
executorParam
,
author
,
alarmEmail
,
alarmThreshold
,
glueSwitch
,
glueSource
,
glueRemark
);
author
,
alarmEmail
,
alarmThreshold
,
glueSwitch
,
glueSource
,
glueRemark
);
}
}
@RequestMapping
(
"/reschedule"
)
@RequestMapping
(
"/reschedule"
)
@ResponseBody
@ResponseBody
public
ReturnT
<
String
>
reschedule
(
String
jobGroup
,
String
jobName
,
String
jobCron
,
String
jobDesc
,
public
ReturnT
<
String
>
reschedule
(
String
jobGroup
,
String
jobName
,
String
jobCron
,
String
jobDesc
,
String
executorAddress
,
String
executor
Handler
,
String
executorParam
,
String
executorAddress
,
String
executor
Param
,
String
author
,
String
alarmEmail
,
int
alarmThreshold
,
int
glueSwitch
)
{
String
author
,
String
alarmEmail
,
int
alarmThreshold
)
{
return
xxlJobService
.
reschedule
(
jobGroup
,
jobName
,
jobCron
,
jobDesc
,
executorAddress
,
executor
Handler
,
executor
Param
,
author
,
return
xxlJobService
.
reschedule
(
jobGroup
,
jobName
,
jobCron
,
jobDesc
,
executorAddress
,
executorParam
,
author
,
alarmEmail
,
alarmThreshold
,
glueSwitch
);
alarmEmail
,
alarmThreshold
);
}
}
@RequestMapping
(
"/remove"
)
@RequestMapping
(
"/remove"
)
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
浏览文件 @
c1cda137
package
com
.
xxl
.
job
.
admin
.
controller
;
package
com
.
xxl
.
job
.
admin
.
controller
;
import
java.text.ParseException
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
javax.annotation.Resource
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.time.DateUtils
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.ui.Model
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
com.xxl.job.admin.core.constant.Constants.JobGroupEnum
;
import
com.xxl.job.admin.core.constant.Constants.JobGroupEnum
;
import
com.xxl.job.admin.core.model.ReturnT
;
import
com.xxl.job.admin.core.model.ReturnT
;
import
com.xxl.job.admin.core.model.XxlJobInfo
;
import
com.xxl.job.admin.core.model.XxlJobInfo
;
...
@@ -26,6 +10,20 @@ import com.xxl.job.core.handler.HandlerRepository.ActionEnum;
...
@@ -26,6 +10,20 @@ import com.xxl.job.core.handler.HandlerRepository.ActionEnum;
import
com.xxl.job.core.handler.HandlerRepository.HandlerParamEnum
;
import
com.xxl.job.core.handler.HandlerRepository.HandlerParamEnum
;
import
com.xxl.job.core.util.HttpUtil
;
import
com.xxl.job.core.util.HttpUtil
;
import
com.xxl.job.core.util.HttpUtil.RemoteCallBack
;
import
com.xxl.job.core.util.HttpUtil.RemoteCallBack
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.time.DateUtils
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.ui.Model
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
javax.annotation.Resource
;
import
java.text.ParseException
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
/**
* index controller
* index controller
...
@@ -155,11 +153,10 @@ public class JobLogController {
...
@@ -155,11 +153,10 @@ public class JobLogController {
Map
<
String
,
String
>
reqMap
=
new
HashMap
<
String
,
String
>();
Map
<
String
,
String
>
reqMap
=
new
HashMap
<
String
,
String
>();
reqMap
.
put
(
HandlerParamEnum
.
TIMESTAMP
.
name
(),
String
.
valueOf
(
System
.
currentTimeMillis
()));
reqMap
.
put
(
HandlerParamEnum
.
TIMESTAMP
.
name
(),
String
.
valueOf
(
System
.
currentTimeMillis
()));
reqMap
.
put
(
HandlerParamEnum
.
ACTION
.
name
(),
ActionEnum
.
KILL
.
name
());
reqMap
.
put
(
HandlerParamEnum
.
ACTION
.
name
(),
ActionEnum
.
KILL
.
name
());
reqMap
.
put
(
HandlerParamEnum
.
GLUE_SWITCH
.
name
(),
String
.
valueOf
(
jobInfo
.
getGlueSwitch
()));
reqMap
.
put
(
HandlerParamEnum
.
EXECUTOR_HANDLER
.
name
(),
log
.
getExecutorHandler
());
reqMap
.
put
(
HandlerParamEnum
.
JOB_GROUP
.
name
(),
log
.
getJobGroup
());
reqMap
.
put
(
HandlerParamEnum
.
JOB_GROUP
.
name
(),
log
.
getJobGroup
());
reqMap
.
put
(
HandlerParamEnum
.
JOB_NAME
.
name
(),
log
.
getJobName
());
reqMap
.
put
(
HandlerParamEnum
.
JOB_NAME
.
name
(),
log
.
getJobName
());
reqMap
.
put
(
HandlerParamEnum
.
GLUE_SWITCH
.
name
(),
String
.
valueOf
(
jobInfo
.
getGlueSwitch
()));
RemoteCallBack
callBack
=
HttpUtil
.
post
(
HttpUtil
.
addressToUrl
(
log
.
getExecutorAddress
()),
reqMap
);
RemoteCallBack
callBack
=
HttpUtil
.
post
(
HttpUtil
.
addressToUrl
(
log
.
getExecutorAddress
()),
reqMap
);
if
(
HttpUtil
.
RemoteCallBack
.
SUCCESS
.
equals
(
callBack
.
getStatus
()))
{
if
(
HttpUtil
.
RemoteCallBack
.
SUCCESS
.
equals
(
callBack
.
getStatus
()))
{
log
.
setHandleStatus
(
HttpUtil
.
RemoteCallBack
.
FAIL
);
log
.
setHandleStatus
(
HttpUtil
.
RemoteCallBack
.
FAIL
);
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
浏览文件 @
c1cda137
...
@@ -58,12 +58,11 @@ public class RemoteHttpJobBean extends QuartzJobBean {
...
@@ -58,12 +58,11 @@ public class RemoteHttpJobBean extends QuartzJobBean {
params
.
put
(
HandlerParamEnum
.
LOG_ADDRESS
.
name
(),
XxlJobLogCallbackServer
.
getTrigger_log_address
());
params
.
put
(
HandlerParamEnum
.
LOG_ADDRESS
.
name
(),
XxlJobLogCallbackServer
.
getTrigger_log_address
());
params
.
put
(
HandlerParamEnum
.
LOG_ID
.
name
(),
String
.
valueOf
(
jobLog
.
getId
()));
params
.
put
(
HandlerParamEnum
.
LOG_ID
.
name
(),
String
.
valueOf
(
jobLog
.
getId
()));
params
.
put
(
HandlerParamEnum
.
EXECUTOR_HANDLER
.
name
(),
jobInfo
.
getExecutorHandler
());
params
.
put
(
HandlerParamEnum
.
JOB_GROUP
.
name
(),
jobInfo
.
getJobGroup
());
params
.
put
(
HandlerParamEnum
.
JOB_NAME
.
name
(),
jobInfo
.
getJobName
());
params
.
put
(
HandlerParamEnum
.
EXECUTOR_PARAMS
.
name
(),
jobInfo
.
getExecutorParam
());
params
.
put
(
HandlerParamEnum
.
EXECUTOR_PARAMS
.
name
(),
jobInfo
.
getExecutorParam
());
params
.
put
(
HandlerParamEnum
.
GLUE_SWITCH
.
name
(),
String
.
valueOf
(
jobInfo
.
getGlueSwitch
()));
params
.
put
(
HandlerParamEnum
.
GLUE_SWITCH
.
name
(),
String
.
valueOf
(
jobInfo
.
getGlueSwitch
()));
params
.
put
(
HandlerParamEnum
.
JOB_GROUP
.
name
(),
jobInfo
.
getJobGroup
());
params
.
put
(
HandlerParamEnum
.
JOB_NAME
.
name
(),
jobInfo
.
getJobName
());
// failover trigger
// failover trigger
RemoteCallBack
callback
=
failoverTrigger
(
jobInfo
.
getExecutorAddress
(),
params
,
jobLog
);
RemoteCallBack
callback
=
failoverTrigger
(
jobInfo
.
getExecutorAddress
(),
params
,
jobLog
);
...
@@ -86,7 +85,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
...
@@ -86,7 +85,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
/**
/**
* failover for trigger remote address
* failover for trigger remote address
* @param
addressArr
* @param
handler_address
* @return
* @return
*/
*/
public
RemoteCallBack
failoverTrigger
(
String
handler_address
,
HashMap
<
String
,
String
>
handler_params
,
XxlJobLog
jobLog
){
public
RemoteCallBack
failoverTrigger
(
String
handler_address
,
HashMap
<
String
,
String
>
handler_params
,
XxlJobLog
jobLog
){
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/service/IXxlJobService.java
浏览文件 @
c1cda137
...
@@ -14,13 +14,13 @@ public interface IXxlJobService {
...
@@ -14,13 +14,13 @@ public interface IXxlJobService {
public
Map
<
String
,
Object
>
pageList
(
int
start
,
int
length
,
String
jobGroup
,
String
jobDesc
,
String
filterTime
);
public
Map
<
String
,
Object
>
pageList
(
int
start
,
int
length
,
String
jobGroup
,
String
jobDesc
,
String
filterTime
);
public
ReturnT
<
String
>
add
(
String
jobGroup
,
String
jobCron
,
String
jobDesc
,
public
ReturnT
<
String
>
add
(
String
jobGroup
,
String
jobCron
,
String
jobDesc
,
String
executorAddress
,
String
executor
Handler
,
String
executorParam
,
String
executorAddress
,
String
executor
Param
,
String
author
,
String
alarmEmail
,
int
alarmThreshold
,
String
author
,
String
alarmEmail
,
int
alarmThreshold
,
int
glueSwitch
,
String
glueSource
,
String
glueRemark
);
int
glueSwitch
,
String
glueSource
,
String
glueRemark
);
public
ReturnT
<
String
>
reschedule
(
String
jobGroup
,
String
jobName
,
String
jobCron
,
String
jobDesc
,
public
ReturnT
<
String
>
reschedule
(
String
jobGroup
,
String
jobName
,
String
jobCron
,
String
jobDesc
,
String
handler_address
,
String
handler_
name
,
String
handler_params
,
String
handler_address
,
String
handler_
params
,
String
author
,
String
alarmEmail
,
int
alarmThreshold
,
int
glueSwitch
);
String
author
,
String
alarmEmail
,
int
alarmThreshold
);
public
ReturnT
<
String
>
remove
(
String
jobGroup
,
String
jobName
);
public
ReturnT
<
String
>
remove
(
String
jobGroup
,
String
jobName
);
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
浏览文件 @
c1cda137
package
com
.
xxl
.
job
.
admin
.
service
.
impl
;
package
com
.
xxl
.
job
.
admin
.
service
.
impl
;
import
java.util.HashMap
;
import
java.util.*
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.UUID
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.time.DateFormatUtils
;
import
org.apache.commons.lang.time.FastDateFormat
;
import
org.quartz.CronExpression
;
import
org.quartz.CronExpression
;
import
org.quartz.SchedulerException
;
import
org.quartz.SchedulerException
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
...
@@ -60,7 +59,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
...
@@ -60,7 +59,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
@Override
@Override
public
ReturnT
<
String
>
add
(
String
jobGroup
,
String
jobCron
,
String
jobDesc
,
public
ReturnT
<
String
>
add
(
String
jobGroup
,
String
jobCron
,
String
jobDesc
,
String
executorAddress
,
String
executor
Handler
,
String
executorParam
,
String
executorAddress
,
String
executor
Param
,
String
author
,
String
alarmEmail
,
int
alarmThreshold
,
String
author
,
String
alarmEmail
,
int
alarmThreshold
,
int
glueSwitch
,
String
glueSource
,
String
glueRemark
)
{
int
glueSwitch
,
String
glueSource
,
String
glueRemark
)
{
// valid
// valid
...
@@ -76,9 +75,6 @@ public class XxlJobServiceImpl implements IXxlJobService {
...
@@ -76,9 +75,6 @@ public class XxlJobServiceImpl implements IXxlJobService {
if
(
StringUtils
.
isBlank
(
executorAddress
))
{
if
(
StringUtils
.
isBlank
(
executorAddress
))
{
return
new
ReturnT
<
String
>(
500
,
"请输入“执行器地址”"
);
return
new
ReturnT
<
String
>(
500
,
"请输入“执行器地址”"
);
}
}
if
(
glueSwitch
==
0
&&
StringUtils
.
isBlank
(
executorHandler
))
{
return
new
ReturnT
<
String
>(
500
,
"请输入“jobHandler”"
);
}
if
(
StringUtils
.
isBlank
(
author
))
{
if
(
StringUtils
.
isBlank
(
author
))
{
return
new
ReturnT
<
String
>(
500
,
"请输入“负责人”"
);
return
new
ReturnT
<
String
>(
500
,
"请输入“负责人”"
);
}
}
...
@@ -90,14 +86,14 @@ public class XxlJobServiceImpl implements IXxlJobService {
...
@@ -90,14 +86,14 @@ public class XxlJobServiceImpl implements IXxlJobService {
}
}
// generate jobName
// generate jobName
String
jobName
=
UUID
.
randomUUID
().
toString
(
);
String
jobName
=
FastDateFormat
.
getInstance
(
"yyyyMMddHHmmssSSSS"
).
format
(
new
Date
()
);
try
{
try
{
if
(
DynamicSchedulerUtil
.
checkExists
(
jobName
,
jobGroup
))
{
if
(
DynamicSchedulerUtil
.
checkExists
(
jobName
,
jobGroup
))
{
return
new
ReturnT
<
String
>(
500
,
"
此任务已存在,请更换任务组或任务名
"
);
return
new
ReturnT
<
String
>(
500
,
"
系统繁忙,请稍后重试
"
);
}
}
}
catch
(
SchedulerException
e1
)
{
}
catch
(
SchedulerException
e1
)
{
e1
.
printStackTrace
();
e1
.
printStackTrace
();
return
new
ReturnT
<
String
>(
500
,
"
此任务已存在,请更换任务组或任务名
"
);
return
new
ReturnT
<
String
>(
500
,
"
系统繁忙,请稍后重试
"
);
}
}
// Backup to the database
// Backup to the database
...
@@ -114,7 +110,6 @@ public class XxlJobServiceImpl implements IXxlJobService {
...
@@ -114,7 +110,6 @@ public class XxlJobServiceImpl implements IXxlJobService {
jobInfo
.
setGlueSource
(
glueSource
);
jobInfo
.
setGlueSource
(
glueSource
);
jobInfo
.
setGlueRemark
(
glueRemark
);
jobInfo
.
setGlueRemark
(
glueRemark
);
jobInfo
.
setExecutorAddress
(
executorAddress
);
jobInfo
.
setExecutorAddress
(
executorAddress
);
jobInfo
.
setExecutorHandler
(
executorHandler
);
jobInfo
.
setExecutorParam
(
executorParam
);
jobInfo
.
setExecutorParam
(
executorParam
);
xxlJobInfoDao
.
save
(
jobInfo
);
xxlJobInfoDao
.
save
(
jobInfo
);
...
@@ -135,8 +130,8 @@ public class XxlJobServiceImpl implements IXxlJobService {
...
@@ -135,8 +130,8 @@ public class XxlJobServiceImpl implements IXxlJobService {
@Override
@Override
public
ReturnT
<
String
>
reschedule
(
String
jobGroup
,
String
jobName
,
String
jobCron
,
String
jobDesc
,
public
ReturnT
<
String
>
reschedule
(
String
jobGroup
,
String
jobName
,
String
jobCron
,
String
jobDesc
,
String
executorAddress
,
String
executorHandler
,
String
executorParam
,
String
executorAddress
,
String
executorParam
,
String
author
,
String
alarmEmail
,
int
alarmThreshold
,
int
glueSwitch
)
{
String
author
,
String
alarmEmail
,
int
alarmThreshold
)
{
// valid
// valid
if
(
JobGroupEnum
.
match
(
jobGroup
)
==
null
)
{
if
(
JobGroupEnum
.
match
(
jobGroup
)
==
null
)
{
...
@@ -154,18 +149,12 @@ public class XxlJobServiceImpl implements IXxlJobService {
...
@@ -154,18 +149,12 @@ public class XxlJobServiceImpl implements IXxlJobService {
if
(
StringUtils
.
isBlank
(
executorAddress
))
{
if
(
StringUtils
.
isBlank
(
executorAddress
))
{
return
new
ReturnT
<
String
>(
500
,
"请输入“执行器地址”"
);
return
new
ReturnT
<
String
>(
500
,
"请输入“执行器地址”"
);
}
}
if
(
glueSwitch
==
0
&&
StringUtils
.
isBlank
(
executorHandler
))
{
return
new
ReturnT
<
String
>(
500
,
"请输入“jobHandler”"
);
}
if
(
StringUtils
.
isBlank
(
author
))
{
if
(
StringUtils
.
isBlank
(
author
))
{
return
new
ReturnT
<
String
>(
500
,
"请输入“负责人”"
);
return
new
ReturnT
<
String
>(
500
,
"请输入“负责人”"
);
}
}
if
(
StringUtils
.
isBlank
(
alarmEmail
))
{
if
(
StringUtils
.
isBlank
(
alarmEmail
))
{
return
new
ReturnT
<
String
>(
500
,
"请输入“报警邮件”"
);
return
new
ReturnT
<
String
>(
500
,
"请输入“报警邮件”"
);
}
}
if
(
alarmThreshold
<
0
)
{
alarmThreshold
=
0
;
}
XxlJobInfo
jobInfo
=
xxlJobInfoDao
.
load
(
jobGroup
,
jobName
);
XxlJobInfo
jobInfo
=
xxlJobInfoDao
.
load
(
jobGroup
,
jobName
);
jobInfo
.
setJobDesc
(
jobDesc
);
jobInfo
.
setJobDesc
(
jobDesc
);
...
@@ -173,9 +162,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
...
@@ -173,9 +162,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
jobInfo
.
setAuthor
(
author
);
jobInfo
.
setAuthor
(
author
);
jobInfo
.
setAlarmEmail
(
alarmEmail
);
jobInfo
.
setAlarmEmail
(
alarmEmail
);
jobInfo
.
setAlarmThreshold
(
alarmThreshold
);
jobInfo
.
setAlarmThreshold
(
alarmThreshold
);
jobInfo
.
setGlueSwitch
(
glueSwitch
);
jobInfo
.
setExecutorAddress
(
executorAddress
);
jobInfo
.
setExecutorAddress
(
executorAddress
);
jobInfo
.
setExecutorHandler
(
executorHandler
);
jobInfo
.
setExecutorParam
(
executorParam
);
jobInfo
.
setExecutorParam
(
executorParam
);
try
{
try
{
...
...
xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl
浏览文件 @
c1cda137
...
@@ -73,7 +73,6 @@
...
@@ -73,7 +73,6 @@
<th
name=
"jobCron"
>
Cron
</th>
<th
name=
"jobCron"
>
Cron
</th>
<th
name=
"jobClass"
>
JobBean
</th>
<th
name=
"jobClass"
>
JobBean
</th>
<th
name=
"executorAddress"
>
执行器地址
</th>
<th
name=
"executorAddress"
>
执行器地址
</th>
<th
name=
"executorHandler"
>
JobHandler
</th>
<th
name=
"executorParam"
>
任务参数
</th>
<th
name=
"executorParam"
>
任务参数
</th>
<th
name=
"addTime"
>
新增时间
</th>
<th
name=
"addTime"
>
新增时间
</th>
<th
name=
"updateTime"
>
更新时间
</th>
<th
name=
"updateTime"
>
更新时间
</th>
...
@@ -121,16 +120,16 @@
...
@@ -121,16 +120,16 @@
<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>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"lastname"
class=
"col-sm-2 control-label"
>
Cron
<font
color=
"red"
>
*
</font></label>
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"jobCron"
placeholder=
"请输入“Cron”"
maxlength=
"20"
></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=
"executorAddress"
placeholder=
"请输入“执行器地址”,多个地址逗号分隔"
maxlength=
"50"
></div>
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"executorAddress"
placeholder=
"请输入“执行器地址”,多个地址逗号分隔"
maxlength=
"50"
></div>
<label
for=
"lastname"
class=
"col-sm-2 control-label"
>
Cron
<font
color=
"red"
>
*
</font></label>
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"jobCron"
placeholder=
"请输入“Cron”"
maxlength=
"20"
></div>
</div>
</div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"lastname"
class=
"col-sm-2 control-label"
>
JobHandler
<font
color=
"red"
>
*
</font></label>
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"executorHandler"
placeholder=
"请输入“jobHandler”"
maxlength=
"50"
></div>
<label
for=
"firstname"
class=
"col-sm-2 control-label"
>
执行参数
<font
color=
"black"
>
*
</font></label>
<label
for=
"firstname"
class=
"col-sm-2 control-label"
>
执行参数
<font
color=
"black"
>
*
</font></label>
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"executorParam"
placeholder=
"请输入“执行参数”"
maxlength=
"100"
></div>
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"executorParam"
placeholder=
"请输入“执行参数”"
maxlength=
"100"
></div>
<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=
"author"
placeholder=
"请输入“负责人”"
maxlength=
"50"
></div>
</div>
</div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<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>
...
@@ -139,20 +138,19 @@
...
@@ -139,20 +138,19 @@
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"alarmThreshold"
placeholder=
"请输入“报警阈值”"
maxlength=
"5"
></div>
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"alarmThreshold"
placeholder=
"请输入“报警阈值”"
maxlength=
"5"
></div>
</div>
</div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"lastname"
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"
><input
type=
"text"
class=
"form-control"
name=
"author"
placeholder=
"请输入“负责人”"
maxlength=
"50"
></div>
<div
class=
"col-sm-4"
>
<select
class=
"form-control"
name=
"glueSwitch"
>
<option
value=
"0"
>
BEAN模式
</option>
<option
value=
"1"
>
GLUE模式
</option>
</select>
</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"
>
<button
type=
"submit"
class=
"btn btn-primary"
>
保存
</button>
<button
type=
"submit"
class=
"btn btn-primary"
>
保存
</button>
<button
type=
"button"
class=
"btn btn-default"
data-dismiss=
"modal"
>
取消
</button>
<button
type=
"button"
class=
"btn btn-default"
data-dismiss=
"modal"
>
取消
</button>
</div>
</div>
<div
class=
"col-sm-3"
>
<div
class=
"checkbox"
>
<label><input
type=
"checkbox"
class=
"ifGLUE"
>
开启GLUE模式
<font
color=
"black"
>
*
</font></label>
<input
type=
"hidden"
name=
"glueSwitch"
value=
"0"
>
</div>
</div>
</div>
</div>
<input
type=
"hidden"
name=
"glueRemark"
value=
"GLUE代码初始化"
>
<input
type=
"hidden"
name=
"glueRemark"
value=
"GLUE代码初始化"
>
...
@@ -207,17 +205,17 @@ public class DemoJobHandler extends IJobHandler {
...
@@ -207,17 +205,17 @@ public class DemoJobHandler extends IJobHandler {
<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>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"lastname"
class=
"col-sm-2 control-label"
>
Cron
<font
color=
"red"
>
*
</font></label>
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"jobCron"
placeholder=
"请输入“Cron”"
maxlength=
"20"
></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=
"executorAddress"
placeholder=
"请输入“执行器地址”,多个地址逗号分隔"
maxlength=
"50"
></div>
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"executorAddress"
placeholder=
"请输入“执行器地址”,多个地址逗号分隔"
maxlength=
"50"
></div>
<label
for=
"lastname"
class=
"col-sm-2 control-label"
>
Cron
<font
color=
"red"
>
*
</font></label>
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"jobCron"
placeholder=
"请输入“Cron”"
maxlength=
"20"
></div>
</div>
</div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"lastname"
class=
"col-sm-2 control-label"
>
JobHandler
<font
color=
"red"
>
*
</font></label>
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"executorHandler"
placeholder=
"请输入“jobHandler”"
maxlength=
"50"
></div>
<label
for=
"firstname"
class=
"col-sm-2 control-label"
>
执行参数
<font
color=
"black"
>
*
</font></label>
<label
for=
"firstname"
class=
"col-sm-2 control-label"
>
执行参数
<font
color=
"black"
>
*
</font></label>
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"executorParam"
placeholder=
"请输入“执行参数”"
maxlength=
"100"
></div>
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"executorParam"
placeholder=
"请输入“执行参数”"
maxlength=
"100"
></div>
<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=
"author"
placeholder=
"请输入“负责人”"
maxlength=
"50"
></div>
</div>
</div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<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>
...
@@ -226,20 +224,21 @@ public class DemoJobHandler extends IJobHandler {
...
@@ -226,20 +224,21 @@ public class DemoJobHandler extends IJobHandler {
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"alarmThreshold"
placeholder=
"请输入“报警阈值”"
maxlength=
"5"
></div>
<div
class=
"col-sm-4"
><input
type=
"text"
class=
"form-control"
name=
"alarmThreshold"
placeholder=
"请输入“报警阈值”"
maxlength=
"5"
></div>
</div>
</div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"lastname"
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"
><input
type=
"text"
class=
"form-control"
name=
"author"
placeholder=
"请输入“负责人”"
maxlength=
"50"
></div>
<div
class=
"col-sm-4"
>
<select
class=
"form-control"
name=
"glueSwitch"
disabled
>
<option
value=
"0"
>
BEAN模式
</option>
<option
value=
"1"
>
GLUE模式
</option>
</select>
</div>
<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>
</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"
>
<button
type=
"submit"
class=
"btn btn-primary"
>
保存
</button>
<button
type=
"submit"
class=
"btn btn-primary"
>
保存
</button>
<button
type=
"button"
class=
"btn btn-default"
data-dismiss=
"modal"
>
取消
</button>
<button
type=
"button"
class=
"btn btn-default"
data-dismiss=
"modal"
>
取消
</button>
</div>
</div>
<div
class=
"col-sm-3"
>
<div
class=
"checkbox"
>
<label><input
type=
"checkbox"
class=
"ifGLUE"
>
开启GLUE模式
<font
color=
"black"
>
*
</font></label>
<input
type=
"hidden"
name=
"glueSwitch"
value=
"0"
>
</div>
</div>
</div>
</div>
</form>
</form>
</div>
</div>
...
...
xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js
浏览文件 @
c1cda137
...
@@ -39,7 +39,6 @@ $(function() {
...
@@ -39,7 +39,6 @@ $(function() {
{
"data"
:
'jobCron'
,
"visible"
:
true
},
{
"data"
:
'jobCron'
,
"visible"
:
true
},
{
"data"
:
'jobClass'
,
"visible"
:
false
},
{
"data"
:
'jobClass'
,
"visible"
:
false
},
{
"data"
:
'executorAddress'
,
"visible"
:
false
},
{
"data"
:
'executorAddress'
,
"visible"
:
false
},
{
"data"
:
'executorHandler'
,
"visible"
:
false
},
{
"data"
:
'executorParam'
,
"visible"
:
false
},
{
"data"
:
'executorParam'
,
"visible"
:
false
},
{
{
"data"
:
'addTime'
,
"data"
:
'addTime'
,
...
@@ -100,7 +99,6 @@ $(function() {
...
@@ -100,7 +99,6 @@ $(function() {
' jobDesc="'
+
row
.
jobDesc
+
'" '
+
' jobDesc="'
+
row
.
jobDesc
+
'" '
+
' jobClass="'
+
row
.
jobClass
+
'" '
+
' jobClass="'
+
row
.
jobClass
+
'" '
+
' executorAddress="'
+
row
.
executorAddress
+
'" '
+
' executorAddress="'
+
row
.
executorAddress
+
'" '
+
' executorHandler="'
+
row
.
executorHandler
+
'" '
+
' executorParam="'
+
row
.
executorParam
+
'" '
+
' executorParam="'
+
row
.
executorParam
+
'" '
+
' author="'
+
row
.
author
+
'" '
+
' author="'
+
row
.
author
+
'" '
+
' alarmEmail="'
+
row
.
alarmEmail
+
'" '
+
' alarmEmail="'
+
row
.
alarmEmail
+
'" '
+
...
@@ -225,9 +223,6 @@ $(function() {
...
@@ -225,9 +223,6 @@ $(function() {
executorAddress
:
{
executorAddress
:
{
required
:
true
required
:
true
},
},
executorHandler
:
{
required
:
true
},
alarmEmail
:
{
alarmEmail
:
{
required
:
true
required
:
true
},
},
...
@@ -249,9 +244,6 @@ $(function() {
...
@@ -249,9 +244,6 @@ $(function() {
executorAddress
:
{
executorAddress
:
{
required
:
"请输入“执行器地址”."
required
:
"请输入“执行器地址”."
},
},
executorHandler
:
{
required
:
"请输入“JobHandler”."
},
alarmEmail
:
{
alarmEmail
:
{
required
:
"请输入“报警邮件”."
required
:
"请输入“报警邮件”."
},
},
...
@@ -296,50 +288,28 @@ $(function() {
...
@@ -296,50 +288,28 @@ $(function() {
$
(
".remote_panel"
).
show
();
// remote
$
(
".remote_panel"
).
show
();
// remote
});
});
// GLUE模式开启
$
(
"#addModal .form .ifGLUE"
).
click
(
function
(){
var
ifGLUE
=
$
(
this
).
is
(
':checked'
);
var
$executorHandler
=
$
(
"#addModal .form input[name='executorHandler']"
);
var
$glueSwitch
=
$
(
"#addModal .form input[name='glueSwitch']"
);
if
(
ifGLUE
)
{
$executorHandler
.
val
(
""
);
$executorHandler
.
attr
(
"readonly"
,
"readonly"
);
$glueSwitch
.
val
(
1
);
}
else
{
$executorHandler
.
removeAttr
(
"readonly"
);
$glueSwitch
.
val
(
0
);
}
});
$
(
"#updateModal .form .ifGLUE"
).
click
(
function
(){
var
ifGLUE
=
$
(
this
).
is
(
':checked'
);
var
$executorHandler
=
$
(
"#updateModal .form input[name='executorHandler']"
);
var
$glueSwitch
=
$
(
"#updateModal .form input[name='glueSwitch']"
);
if
(
ifGLUE
)
{
$executorHandler
.
val
(
""
);
$executorHandler
.
attr
(
"readonly"
,
"readonly"
);
$glueSwitch
.
val
(
1
);
}
else
{
$executorHandler
.
removeAttr
(
"readonly"
);
$glueSwitch
.
val
(
0
);
}
});
// 更新
// 更新
$
(
"#job_list"
).
on
(
'click'
,
'.update'
,
function
()
{
$
(
"#job_list"
).
on
(
'click'
,
'.update'
,
function
()
{
// base data
// base data
$
(
"#updateModal .form input[name='jobGroupTitle']"
).
find
(
"option[value='"
+
$
(
this
).
parent
(
'p'
).
attr
(
"jobGroup"
)
+
"']"
).
attr
(
"selected"
,
true
);
$
(
"#updateModal .form input[name='jobGroup']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"jobGroup"
));
$
(
"#updateModal .form input[name='jobGroup']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"jobGroup"
));
$
(
"#updateModal .form input[name='jobName']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"jobName"
));
$
(
"#updateModal .form input[name='jobName']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"jobName"
));
$
(
"#updateModal .form input[name='jobDesc']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"jobDesc"
));
$
(
"#updateModal .form input[name='jobDesc']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"jobDesc"
));
$
(
"#updateModal .form input[name='jobCron']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"jobCron"
));
$
(
"#updateModal .form input[name='jobCron']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"jobCron"
));
$
(
"#updateModal .form input[name='executorAddress']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"executorAddress"
));
$
(
"#updateModal .form input[name='executorAddress']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"executorAddress"
));
$
(
"#updateModal .form input[name='executorHandler']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"executorHandler"
));
$
(
"#updateModal .form input[name='executorParam']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"executorParam"
));
$
(
"#updateModal .form input[name='executorParam']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"executorParam"
));
$
(
"#updateModal .form input[name='author']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"author"
));
$
(
"#updateModal .form input[name='author']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"author"
));
$
(
"#updateModal .form input[name='alarmEmail']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"alarmEmail"
));
$
(
"#updateModal .form input[name='alarmEmail']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"alarmEmail"
));
$
(
"#updateModal .form input[name='alarmThreshold']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"alarmThreshold"
));
$
(
"#updateModal .form input[name='alarmThreshold']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"alarmThreshold"
));
$
(
"#updateModal .form input[name='glueSwitch']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"glueSwitch"
));
// job group selected
$
(
"#updateModal .form select[name='jobGroupTitle']"
).
find
(
"option[value='"
+
$
(
this
).
parent
(
'p'
).
attr
(
"jobGroup"
)
+
"']"
).
attr
(
"selected"
,
true
);
// job group selected
$
(
"#updateModal .form select[name='glueSwitch']"
).
find
(
"option[value='"
+
$
(
this
).
parent
(
'p'
).
attr
(
"glueSwitch"
)
+
"']"
).
attr
(
"selected"
,
true
);
// generate job key
$
(
"#updateModal .form input[name='jobKey']"
).
val
(
$
(
this
).
parent
(
'p'
).
attr
(
"jobGroup"
)
+
"_"
+
$
(
this
).
parent
(
'p'
).
attr
(
"jobName"
)
);
// GLUE check
// GLUE check
var
$glueSwitch
=
$
(
"#updateModal .form input[name='glueSwitch']"
);
var
$glueSwitch
=
$
(
"#updateModal .form input[name='glueSwitch']"
);
...
@@ -370,9 +340,6 @@ $(function() {
...
@@ -370,9 +340,6 @@ $(function() {
executorAddress
:
{
executorAddress
:
{
required
:
true
required
:
true
},
},
executorHandler
:
{
required
:
true
},
alarmEmail
:
{
alarmEmail
:
{
required
:
true
required
:
true
},
},
...
@@ -394,9 +361,6 @@ $(function() {
...
@@ -394,9 +361,6 @@ $(function() {
executorAddress
:
{
executorAddress
:
{
required
:
"请输入“执行器地址”."
required
:
"请输入“执行器地址”."
},
},
executorHandler
:
{
required
:
"请输入“JobHandler”."
},
alarmEmail
:
{
alarmEmail
:
{
required
:
"请输入“报警邮件”."
required
:
"请输入“报警邮件”."
},
},
...
@@ -419,6 +383,8 @@ $(function() {
...
@@ -419,6 +383,8 @@ $(function() {
element
.
parent
(
'div'
).
append
(
error
);
element
.
parent
(
'div'
).
append
(
error
);
},
},
submitHandler
:
function
(
form
)
{
submitHandler
:
function
(
form
)
{
// post
$
.
post
(
base_url
+
"/jobinfo/reschedule"
,
$
(
"#updateModal .form"
).
serialize
(),
function
(
data
,
status
)
{
$
.
post
(
base_url
+
"/jobinfo/reschedule"
,
$
(
"#updateModal .form"
).
serialize
(),
function
(
data
,
status
)
{
if
(
data
.
code
==
"200"
)
{
if
(
data
.
code
==
"200"
)
{
ComAlert
.
show
(
1
,
"更新成功"
,
function
(){
ComAlert
.
show
(
1
,
"更新成功"
,
function
(){
...
@@ -437,8 +403,24 @@ $(function() {
...
@@ -437,8 +403,24 @@ $(function() {
$
(
"#updateModal"
).
on
(
'hide.bs.modal'
,
function
()
{
$
(
"#updateModal"
).
on
(
'hide.bs.modal'
,
function
()
{
$
(
"#updateModal .form"
)[
0
].
reset
()
$
(
"#updateModal .form"
)[
0
].
reset
()
});
});
// GLUE模式开启
/*
$("#addModal .form .ifGLUE").click(function(){
var ifGLUE = $(this).is(':checked');
var $executorHandler = $("#addModal .form input[name='executorHandler']");
var $glueSwitch = $("#addModal .form input[name='glueSwitch']");
if (ifGLUE) {
$executorHandler.val("");
$executorHandler.attr("readonly","readonly");
$glueSwitch.val(1);
} else {
$executorHandler.removeAttr("readonly");
$glueSwitch.val(0);
}
});
*/
/*
/*
// 新增-添加参数
// 新增-添加参数
$("#addModal .addParam").on('click', function () {
$("#addModal .addParam").on('click', function () {
...
@@ -454,4 +436,5 @@ $(function() {
...
@@ -454,4 +436,5 @@ $(function() {
});
});
});
});
*/
*/
});
});
xxl-job-core/src/main/java/com/xxl/job/core/executor/jetty/XxlJobExecutor.java
浏览文件 @
c1cda137
...
@@ -88,7 +88,7 @@ public class XxlJobExecutor implements ApplicationContextAware {
...
@@ -88,7 +88,7 @@ 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
).
nam
e
();
String
jobName
=
serviceBean
.
getClass
().
getAnnotation
(
JobHander
.
class
).
valu
e
();
if
(
jobName
!=
null
&&
jobName
.
trim
().
length
()>
0
&&
serviceBean
instanceof
IJobHandler
)
{
if
(
jobName
!=
null
&&
jobName
.
trim
().
length
()>
0
&&
serviceBean
instanceof
IJobHandler
)
{
IJobHandler
handler
=
(
IJobHandler
)
serviceBean
;
IJobHandler
handler
=
(
IJobHandler
)
serviceBean
;
HandlerRepository
.
regist
(
jobName
,
handler
);
HandlerRepository
.
regist
(
jobName
,
handler
);
...
...
xxl-job-core/src/main/java/com/xxl/job/core/handler/HandlerRepository.java
浏览文件 @
c1cda137
package
com
.
xxl
.
job
.
core
.
handler
;
package
com
.
xxl
.
job
.
core
.
handler
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.LinkedBlockingQueue
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.xxl.job.core.handler.impl.GlueJobHandler
;
import
com.xxl.job.core.handler.impl.GlueJobHandler
;
import
com.xxl.job.core.log.XxlJobFileAppender
;
import
com.xxl.job.core.log.XxlJobFileAppender
;
import
com.xxl.job.core.util.HttpUtil
;
import
com.xxl.job.core.util.HttpUtil
;
import
com.xxl.job.core.util.HttpUtil.RemoteCallBack
;
import
com.xxl.job.core.util.HttpUtil.RemoteCallBack
;
import
com.xxl.job.core.util.JacksonUtil
;
import
com.xxl.job.core.util.JacksonUtil
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.LinkedBlockingQueue
;
/**
/**
* handler repository
* handler repository
...
@@ -32,9 +31,13 @@ public class HandlerRepository {
...
@@ -32,9 +31,13 @@ public class HandlerRepository {
*/
*/
ACTION
,
ACTION
,
/**
/**
* remote executor jobhandler
* job group
*/
JOB_GROUP
,
/**
* job name
*/
*/
EXECUTOR_HANDLER
,
JOB_NAME
,
/**
/**
* params of jobhandler
* params of jobhandler
*/
*/
...
@@ -43,14 +46,6 @@ public class HandlerRepository {
...
@@ -43,14 +46,6 @@ public class HandlerRepository {
* switch of glue job: 0-no,1-yes
* switch of glue job: 0-no,1-yes
*/
*/
GLUE_SWITCH
,
GLUE_SWITCH
,
/**
* job group
*/
JOB_GROUP
,
/**
* job name
*/
JOB_NAME
,
/**
/**
* address for callback log
* address for callback log
*/
*/
...
@@ -99,37 +94,39 @@ public class HandlerRepository {
...
@@ -99,37 +94,39 @@ public class HandlerRepository {
// parse namespace
// parse namespace
if
(
namespace
.
equals
(
ActionEnum
.
RUN
.
name
()))
{
if
(
namespace
.
equals
(
ActionEnum
.
RUN
.
name
()))
{
// push data to queue
// generate jobKey
String
job_group
=
_param
.
get
(
HandlerParamEnum
.
JOB_GROUP
.
name
());
String
job_name
=
_param
.
get
(
HandlerParamEnum
.
JOB_NAME
.
name
());
if
(
job_group
==
null
||
job_group
.
trim
().
length
()==
0
||
job_name
==
null
||
job_name
.
trim
().
length
()==
0
)
{
callback
.
setMsg
(
"JOB_GROUP or JOB_NAME is null."
);
return
JacksonUtil
.
writeValueAsString
(
callback
);
}
String
jobKey
=
job_group
.
concat
(
"_"
).
concat
(
job_name
);
// glue switch
String
handler_glue_switch
=
_param
.
get
(
HandlerParamEnum
.
GLUE_SWITCH
.
name
());
String
handler_glue_switch
=
_param
.
get
(
HandlerParamEnum
.
GLUE_SWITCH
.
name
());
HandlerThread
handlerThread
=
null
;
if
(
handler_glue_switch
==
null
||
handler_glue_switch
.
trim
().
length
()==
0
){
callback
.
setMsg
(
"GLUE_SWITCH is null."
);
return
JacksonUtil
.
writeValueAsString
(
callback
);
}
HandlerThread
handlerThread
=
handlerTreadMap
.
get
(
jobKey
);;
if
(
"0"
.
equals
(
handler_glue_switch
))
{
if
(
"0"
.
equals
(
handler_glue_switch
))
{
// bean model
// bean model
String
handler_name
=
_param
.
get
(
HandlerParamEnum
.
EXECUTOR_HANDLER
.
name
());
if
(
handler_name
==
null
||
handler_name
.
trim
().
length
()==
0
)
{
callback
.
setMsg
(
"bean model handler[HANDLER_NAME] not found."
);
return
JacksonUtil
.
writeValueAsString
(
callback
);
}
handlerThread
=
handlerTreadMap
.
get
(
handler_name
);
if
(
handlerThread
==
null
)
{
if
(
handlerThread
==
null
)
{
callback
.
setMsg
(
"handler
["
+
handler_name
+
"] not found."
);
callback
.
setMsg
(
"handler
for jobKey=["
+
jobKey
+
"] not found."
);
return
JacksonUtil
.
writeValueAsString
(
callback
);
return
JacksonUtil
.
writeValueAsString
(
callback
);
}
}
}
else
{
}
else
{
// glue
// glue
String
job_group
=
_param
.
get
(
HandlerParamEnum
.
JOB_GROUP
.
name
());
String
job_name
=
_param
.
get
(
HandlerParamEnum
.
JOB_NAME
.
name
());
if
(
job_group
==
null
||
job_group
.
trim
().
length
()==
0
||
job_name
==
null
||
job_name
.
trim
().
length
()==
0
)
{
callback
.
setMsg
(
"glue model handler[job group or name] is null."
);
return
JacksonUtil
.
writeValueAsString
(
callback
);
}
String
glueHandleName
=
"glue_"
.
concat
(
job_group
).
concat
(
"_"
).
concat
(
job_name
);
handlerThread
=
handlerTreadMap
.
get
(
glueHandleName
);
if
(
handlerThread
==
null
)
{
if
(
handlerThread
==
null
)
{
HandlerRepository
.
regist
(
glueHandleName
,
new
GlueJobHandler
(
job_group
,
job_name
));
HandlerRepository
.
regist
(
jobKey
,
new
GlueJobHandler
(
job_group
,
job_name
));
}
}
handlerThread
=
handlerTreadMap
.
get
(
glueHandleName
);
handlerThread
=
handlerTreadMap
.
get
(
jobKey
);
}
}
// 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
()))
{
}
else
if
(
namespace
.
equals
(
ActionEnum
.
LOG
.
name
()))
{
...
@@ -154,36 +151,25 @@ public class HandlerRepository {
...
@@ -154,36 +151,25 @@ public class HandlerRepository {
callback
.
setStatus
(
RemoteCallBack
.
SUCCESS
);
callback
.
setStatus
(
RemoteCallBack
.
SUCCESS
);
callback
.
setMsg
(
logConteng
);
callback
.
setMsg
(
logConteng
);
}
else
if
(
namespace
.
equals
(
ActionEnum
.
KILL
.
name
()))
{
}
else
if
(
namespace
.
equals
(
ActionEnum
.
KILL
.
name
()))
{
// kill handlerThread, and create new one
// generate jobKey
String
handler_glue_switch
=
_param
.
get
(
HandlerParamEnum
.
GLUE_SWITCH
.
name
());
String
job_group
=
_param
.
get
(
HandlerParamEnum
.
JOB_GROUP
.
name
());
String
handlerName
=
null
;
String
job_name
=
_param
.
get
(
HandlerParamEnum
.
JOB_NAME
.
name
());
if
(
"0"
.
equals
(
handler_glue_switch
))
{
if
(
job_group
==
null
||
job_group
.
trim
().
length
()==
0
||
job_name
==
null
||
job_name
.
trim
().
length
()==
0
)
{
String
executor_handler
=
_param
.
get
(
HandlerParamEnum
.
EXECUTOR_HANDLER
.
name
());
callback
.
setMsg
(
"JOB_GROUP or JOB_NAME is null."
);
if
(
executor_handler
==
null
)
{
return
JacksonUtil
.
writeValueAsString
(
callback
);
callback
.
setMsg
(
"bean job , param[EXECUTOR_HANDLER] is null"
);
return
JacksonUtil
.
writeValueAsString
(
callback
);
}
handlerName
=
executor_handler
;
}
else
{
// glue
String
job_group
=
_param
.
get
(
HandlerParamEnum
.
JOB_GROUP
.
name
());
String
job_name
=
_param
.
get
(
HandlerParamEnum
.
JOB_NAME
.
name
());
if
(
job_group
==
null
||
job_group
.
trim
().
length
()==
0
||
job_name
==
null
||
job_name
.
trim
().
length
()==
0
)
{
callback
.
setMsg
(
"glue job , param[JOB_GROUP or JOB_NAME] is null"
);
return
JacksonUtil
.
writeValueAsString
(
callback
);
}
handlerName
=
"glue_"
.
concat
(
job_group
).
concat
(
"_"
).
concat
(
job_name
);
}
}
String
jobKey
=
job_group
.
concat
(
"_"
).
concat
(
job_name
);
HandlerThread
handlerThread
=
handlerTreadMap
.
get
(
handlerName
);
// kill handlerThread, and create new one
HandlerThread
handlerThread
=
handlerTreadMap
.
get
(
jobKey
);
if
(
handlerThread
!=
null
)
{
if
(
handlerThread
!=
null
)
{
IJobHandler
handler
=
handlerThread
.
getHandler
();
IJobHandler
handler
=
handlerThread
.
getHandler
();
handlerThread
.
toStop
();
handlerThread
.
toStop
();
handlerThread
.
interrupt
();
handlerThread
.
interrupt
();
regist
(
handlerName
,
handler
);
regist
(
jobKey
,
handler
);
callback
.
setStatus
(
RemoteCallBack
.
SUCCESS
);
callback
.
setStatus
(
RemoteCallBack
.
SUCCESS
);
}
else
{
}
else
{
callback
.
setMsg
(
"
job handler["
+
handlerName
+
"] not found."
);
callback
.
setMsg
(
"
handler for jobKey=["
+
jobKey
+
"] not found."
);
}
}
}
else
if
(
namespace
.
equals
(
ActionEnum
.
BEAT
.
name
()))
{
}
else
if
(
namespace
.
equals
(
ActionEnum
.
BEAT
.
name
()))
{
...
...
xxl-job-core/src/main/java/com/xxl/job/core/handler/annotation/JobHander.java
浏览文件 @
c1cda137
...
@@ -15,6 +15,6 @@ import java.lang.annotation.Target;
...
@@ -15,6 +15,6 @@ import java.lang.annotation.Target;
@Inherited
@Inherited
public
@interface
JobHander
{
public
@interface
JobHander
{
String
name
()
;
String
value
()
default
""
;
}
}
xxl-job-executor-example/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java
浏览文件 @
c1cda137
...
@@ -20,7 +20,7 @@ import com.xxl.job.core.handler.annotation.JobHander;
...
@@ -20,7 +20,7 @@ import com.xxl.job.core.handler.annotation.JobHander;
*
*
* @author xuxueli 2015-12-19 19:43:36
* @author xuxueli 2015-12-19 19:43:36
*/
*/
@JobHander
(
name
=
"demoJobHandler
"
)
@JobHander
(
value
=
"defaults_201607192222270796
"
)
@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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论