Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
54f6c050
提交
54f6c050
authored
1月 20, 2018
作者:
xuxueli
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
后端代码国际化定制
上级
820b4407
隐藏空白字符变更
内嵌
并排
正在显示
12 个修改的文件
包含
152 行增加
和
92 行删除
+152
-92
IndexController.java
...in/java/com/xxl/job/admin/controller/IndexController.java
+3
-2
JobCodeController.java
.../java/com/xxl/job/admin/controller/JobCodeController.java
+6
-5
JobGroupController.java
...java/com/xxl/job/admin/controller/JobGroupController.java
+15
-14
JobLogController.java
...n/java/com/xxl/job/admin/controller/JobLogController.java
+6
-5
ExecutorFailStrategyEnum.java
...om/xxl/job/admin/core/enums/ExecutorFailStrategyEnum.java
+4
-2
ExecutorRouteStrategyEnum.java
...m/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java
+11
-10
ExecutorRouteBusyover.java
.../job/admin/core/route/strategy/ExecutorRouteBusyover.java
+2
-1
ExecutorRouteFailover.java
.../job/admin/core/route/strategy/ExecutorRouteFailover.java
+2
-1
JobFailMonitorHelper.java
...a/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
+8
-7
XxlJobTrigger.java
...in/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
+22
-19
XxlJobServiceImpl.java
...ava/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
+29
-24
message.properties
xxl-job-admin/src/main/resources/i18n/message.properties
+44
-2
没有找到文件。
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/IndexController.java
浏览文件 @
54f6c050
...
...
@@ -2,6 +2,7 @@ package com.xxl.job.admin.controller;
import
com.xxl.job.admin.controller.annotation.PermessionLimit
;
import
com.xxl.job.admin.controller.interceptor.PermissionInterceptor
;
import
com.xxl.job.admin.core.util.I18nUtil
;
import
com.xxl.job.admin.service.XxlJobService
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
org.apache.commons.lang3.StringUtils
;
...
...
@@ -67,14 +68,14 @@ public class IndexController {
// param
if
(
StringUtils
.
isBlank
(
userName
)
||
StringUtils
.
isBlank
(
password
)){
return
new
ReturnT
<
String
>(
500
,
"账号或密码为空"
);
return
new
ReturnT
<
String
>(
500
,
I18nUtil
.
getString
(
"login_param_empty"
)
);
}
boolean
ifRem
=
(
StringUtils
.
isNotBlank
(
ifRemember
)
&&
"on"
.
equals
(
ifRemember
))?
true
:
false
;
// do login
boolean
loginRet
=
PermissionInterceptor
.
login
(
response
,
userName
,
password
,
ifRem
);
if
(!
loginRet
)
{
return
new
ReturnT
<
String
>(
500
,
"账号或密码错误"
);
return
new
ReturnT
<
String
>(
500
,
I18nUtil
.
getString
(
"login_param_unvalid"
)
);
}
return
ReturnT
.
SUCCESS
;
}
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java
浏览文件 @
54f6c050
...
...
@@ -2,6 +2,7 @@ package com.xxl.job.admin.controller;
import
com.xxl.job.admin.core.model.XxlJobInfo
;
import
com.xxl.job.admin.core.model.XxlJobLogGlue
;
import
com.xxl.job.admin.core.util.I18nUtil
;
import
com.xxl.job.admin.dao.XxlJobInfoDao
;
import
com.xxl.job.admin.dao.XxlJobLogGlueDao
;
import
com.xxl.job.core.biz.model.ReturnT
;
...
...
@@ -34,10 +35,10 @@ public class JobCodeController {
List
<
XxlJobLogGlue
>
jobLogGlues
=
xxlJobLogGlueDao
.
findByJobId
(
jobId
);
if
(
jobInfo
==
null
)
{
throw
new
RuntimeException
(
"抱歉,任务不存在."
);
throw
new
RuntimeException
(
I18nUtil
.
getString
(
"jobinfo_glue_jobid_unvalid"
)
);
}
if
(
GlueTypeEnum
.
BEAN
==
GlueTypeEnum
.
match
(
jobInfo
.
getGlueType
()))
{
throw
new
RuntimeException
(
"该任务非GLUE模式."
);
throw
new
RuntimeException
(
I18nUtil
.
getString
(
"jobinfo_glue_gluetype_unvalid"
)
);
}
// Glue类型-字典
...
...
@@ -53,14 +54,14 @@ public class JobCodeController {
public
ReturnT
<
String
>
save
(
Model
model
,
int
id
,
String
glueSource
,
String
glueRemark
)
{
// valid
if
(
glueRemark
==
null
)
{
return
new
ReturnT
<
String
>(
500
,
"请输入备注"
);
return
new
ReturnT
<
String
>(
500
,
(
I18nUtil
.
getString
(
"system_please_input"
)
+
I18nUtil
.
getString
(
"jobinfo_glue_remark"
))
);
}
if
(
glueRemark
.
length
()<
4
||
glueRemark
.
length
()>
100
)
{
return
new
ReturnT
<
String
>(
500
,
"备注长度应该在4至100之间"
);
return
new
ReturnT
<
String
>(
500
,
I18nUtil
.
getString
(
"jobinfo_glue_remark_limit"
)
);
}
XxlJobInfo
exists_jobInfo
=
xxlJobInfoDao
.
loadById
(
id
);
if
(
exists_jobInfo
==
null
)
{
return
new
ReturnT
<
String
>(
500
,
"参数异常"
);
return
new
ReturnT
<
String
>(
500
,
I18nUtil
.
getString
(
"jobinfo_glue_jobid_unvalid"
)
);
}
// update new code
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java
浏览文件 @
54f6c050
package
com
.
xxl
.
job
.
admin
.
controller
;
import
com.xxl.job.admin.core.model.XxlJobGroup
;
import
com.xxl.job.admin.core.util.I18nUtil
;
import
com.xxl.job.admin.dao.XxlJobGroupDao
;
import
com.xxl.job.admin.dao.XxlJobInfoDao
;
import
com.xxl.job.core.biz.model.ReturnT
;
...
...
@@ -42,22 +43,22 @@ public class JobGroupController {
// valid
if
(
xxlJobGroup
.
getAppName
()==
null
||
StringUtils
.
isBlank
(
xxlJobGroup
.
getAppName
()))
{
return
new
ReturnT
<
String
>(
500
,
"请输入AppName"
);
return
new
ReturnT
<
String
>(
500
,
(
I18nUtil
.
getString
(
"system_please_input"
)+
"AppName"
)
);
}
if
(
xxlJobGroup
.
getAppName
().
length
()>
64
)
{
return
new
ReturnT
<
String
>(
500
,
"AppName长度限制为4~64"
);
if
(
xxlJobGroup
.
getAppName
().
length
()
<
4
||
xxlJobGroup
.
getAppName
().
length
()
>
64
)
{
return
new
ReturnT
<
String
>(
500
,
I18nUtil
.
getString
(
"jobgroup_field_appName_length"
)
);
}
if
(
xxlJobGroup
.
getTitle
()==
null
||
StringUtils
.
isBlank
(
xxlJobGroup
.
getTitle
()))
{
return
new
ReturnT
<
String
>(
500
,
"请输入名称"
);
return
new
ReturnT
<
String
>(
500
,
(
I18nUtil
.
getString
(
"system_please_input"
)
+
I18nUtil
.
getString
(
"jobgroup_field_title"
))
);
}
if
(
xxlJobGroup
.
getAddressType
()!=
0
)
{
if
(
StringUtils
.
isBlank
(
xxlJobGroup
.
getAddressList
()))
{
return
new
ReturnT
<
String
>(
500
,
"手动录入注册方式,机器地址不可为空"
);
return
new
ReturnT
<
String
>(
500
,
I18nUtil
.
getString
(
"jobgroup_field_addressType_limit"
)
);
}
String
[]
addresss
=
xxlJobGroup
.
getAddressList
().
split
(
","
);
for
(
String
item:
addresss
)
{
if
(
StringUtils
.
isBlank
(
item
))
{
return
new
ReturnT
<
String
>(
500
,
"机器地址非法"
);
return
new
ReturnT
<
String
>(
500
,
I18nUtil
.
getString
(
"jobgroup_field_registryList_unvalid"
)
);
}
}
}
...
...
@@ -71,22 +72,22 @@ public class JobGroupController {
public
ReturnT
<
String
>
update
(
XxlJobGroup
xxlJobGroup
){
// valid
if
(
xxlJobGroup
.
getAppName
()==
null
||
StringUtils
.
isBlank
(
xxlJobGroup
.
getAppName
()))
{
return
new
ReturnT
<
String
>(
500
,
"请输入AppName"
);
return
new
ReturnT
<
String
>(
500
,
(
I18nUtil
.
getString
(
"system_please_input"
)+
"AppName"
)
);
}
if
(
xxlJobGroup
.
getAppName
().
length
()>
64
)
{
return
new
ReturnT
<
String
>(
500
,
"AppName长度限制为4~64"
);
if
(
xxlJobGroup
.
getAppName
().
length
()
<
4
||
xxlJobGroup
.
getAppName
().
length
()
>
64
)
{
return
new
ReturnT
<
String
>(
500
,
I18nUtil
.
getString
(
"jobgroup_field_appName_length"
)
);
}
if
(
xxlJobGroup
.
getTitle
()==
null
||
StringUtils
.
isBlank
(
xxlJobGroup
.
getTitle
()))
{
return
new
ReturnT
<
String
>(
500
,
"请输入名称"
);
return
new
ReturnT
<
String
>(
500
,
(
I18nUtil
.
getString
(
"system_please_input"
)
+
I18nUtil
.
getString
(
"jobgroup_field_title"
))
);
}
if
(
xxlJobGroup
.
getAddressType
()!=
0
)
{
if
(
StringUtils
.
isBlank
(
xxlJobGroup
.
getAddressList
()))
{
return
new
ReturnT
<
String
>(
500
,
"手动录入注册方式,机器地址不可为空"
);
return
new
ReturnT
<
String
>(
500
,
I18nUtil
.
getString
(
"jobgroup_field_addressType_limit"
)
);
}
String
[]
addresss
=
xxlJobGroup
.
getAddressList
().
split
(
","
);
for
(
String
item:
addresss
)
{
if
(
StringUtils
.
isBlank
(
item
))
{
return
new
ReturnT
<
String
>(
500
,
"机器地址非法"
);
return
new
ReturnT
<
String
>(
500
,
I18nUtil
.
getString
(
"jobgroup_field_registryList_unvalid"
)
);
}
}
}
...
...
@@ -102,12 +103,12 @@ public class JobGroupController {
// valid
int
count
=
xxlJobInfoDao
.
pageListCount
(
0
,
10
,
id
,
null
,
null
);
if
(
count
>
0
)
{
return
new
ReturnT
<
String
>(
500
,
"该分组使用中, 不可删除"
);
return
new
ReturnT
<
String
>(
500
,
I18nUtil
.
getString
(
"jobgroup_del_limit_0"
)
);
}
List
<
XxlJobGroup
>
allList
=
xxlJobGroupDao
.
findAll
();
if
(
allList
.
size
()
==
1
)
{
return
new
ReturnT
<
String
>(
500
,
"删除失败, 系统需要至少预留一个默认分组"
);
return
new
ReturnT
<
String
>(
500
,
I18nUtil
.
getString
(
"jobgroup_del_limit_1"
)
);
}
int
ret
=
xxlJobGroupDao
.
remove
(
id
);
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
浏览文件 @
54f6c050
...
...
@@ -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.model.XxlJobLog
;
import
com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.admin.core.util.I18nUtil
;
import
com.xxl.job.admin.dao.XxlJobGroupDao
;
import
com.xxl.job.admin.dao.XxlJobInfoDao
;
import
com.xxl.job.admin.dao.XxlJobLogDao
;
...
...
@@ -107,7 +108,7 @@ public class JobLogController {
ReturnT
<
String
>
logStatue
=
ReturnT
.
SUCCESS
;
XxlJobLog
jobLog
=
xxlJobLogDao
.
load
(
id
);
if
(
jobLog
==
null
)
{
throw
new
RuntimeException
(
"抱歉,日志ID非法."
);
throw
new
RuntimeException
(
I18nUtil
.
getString
(
"joblog_logid_unvalid"
)
);
}
model
.
addAttribute
(
"triggerCode"
,
jobLog
.
getTriggerCode
());
...
...
@@ -147,10 +148,10 @@ public class JobLogController {
XxlJobLog
log
=
xxlJobLogDao
.
load
(
id
);
XxlJobInfo
jobInfo
=
xxlJobInfoDao
.
loadById
(
log
.
getJobId
());
if
(
jobInfo
==
null
)
{
return
new
ReturnT
<
String
>(
500
,
"参数异常"
);
return
new
ReturnT
<
String
>(
500
,
I18nUtil
.
getString
(
"jobinfo_glue_jobid_unvalid"
)
);
}
if
(
ReturnT
.
SUCCESS_CODE
!=
log
.
getTriggerCode
())
{
return
new
ReturnT
<
String
>(
500
,
"调度失败,无法终止日志"
);
return
new
ReturnT
<
String
>(
500
,
I18nUtil
.
getString
(
"joblog_kill_log_limit"
)
);
}
// request of kill
...
...
@@ -165,7 +166,7 @@ public class JobLogController {
if
(
ReturnT
.
SUCCESS_CODE
==
runResult
.
getCode
())
{
log
.
setHandleCode
(
ReturnT
.
FAIL_CODE
);
log
.
setHandleMsg
(
"人为操作主动终止
:"
+
(
runResult
.
getMsg
()!=
null
?
runResult
.
getMsg
():
""
));
log
.
setHandleMsg
(
I18nUtil
.
getString
(
"joblog_kill_log_byman"
)+
"
:"
+
(
runResult
.
getMsg
()!=
null
?
runResult
.
getMsg
():
""
));
log
.
setHandleTime
(
new
Date
());
xxlJobLogDao
.
updateHandleInfo
(
log
);
return
new
ReturnT
<
String
>(
runResult
.
getMsg
());
...
...
@@ -199,7 +200,7 @@ public class JobLogController {
}
else
if
(
type
==
9
)
{
clearBeforeNum
=
0
;
// 清理所有日志数据
}
else
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"清理类型参数异常"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
I18nUtil
.
getString
(
"joblog_clean_type_unvalid"
)
);
}
xxlJobLogDao
.
clearLog
(
jobGroup
,
jobId
,
clearBeforeTime
,
clearBeforeNum
);
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/enums/ExecutorFailStrategyEnum.java
浏览文件 @
54f6c050
package
com
.
xxl
.
job
.
admin
.
core
.
enums
;
import
com.xxl.job.admin.core.util.I18nUtil
;
/**
* Created by xuxueli on 17/5/9.
*/
public
enum
ExecutorFailStrategyEnum
{
FAIL_ALARM
(
"失败告警"
),
FAIL_ALARM
(
I18nUtil
.
getString
(
"jobconf_fail_alarm"
)
),
FAIL_RETRY
(
"失败重试"
);
FAIL_RETRY
(
I18nUtil
.
getString
(
"jobconf_fail_retry"
)
);
private
final
String
title
;
private
ExecutorFailStrategyEnum
(
String
title
)
{
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java
浏览文件 @
54f6c050
package
com
.
xxl
.
job
.
admin
.
core
.
route
;
import
com.xxl.job.admin.core.route.strategy.*
;
import
com.xxl.job.admin.core.util.I18nUtil
;
/**
* Created by xuxueli on 17/3/10.
*/
public
enum
ExecutorRouteStrategyEnum
{
FIRST
(
"第一个"
,
new
ExecutorRouteFirst
()),
LAST
(
"最后一个"
,
new
ExecutorRouteLast
()),
ROUND
(
"轮询"
,
new
ExecutorRouteRound
()),
RANDOM
(
"随机"
,
new
ExecutorRouteRandom
()),
CONSISTENT_HASH
(
"一致性HASH"
,
new
ExecutorRouteConsistentHash
()),
LEAST_FREQUENTLY_USED
(
"最不经常使用"
,
new
ExecutorRouteLFU
()),
LEAST_RECENTLY_USED
(
"最近最久未使用"
,
new
ExecutorRouteLRU
()),
FAILOVER
(
"故障转移"
,
new
ExecutorRouteFailover
()),
BUSYOVER
(
"忙碌转移"
,
new
ExecutorRouteBusyover
()),
SHARDING_BROADCAST
(
"分片广播"
,
null
);
FIRST
(
I18nUtil
.
getString
(
"jobconf_route_first"
)
,
new
ExecutorRouteFirst
()),
LAST
(
I18nUtil
.
getString
(
"jobconf_route_last"
)
,
new
ExecutorRouteLast
()),
ROUND
(
I18nUtil
.
getString
(
"jobconf_route_round"
)
,
new
ExecutorRouteRound
()),
RANDOM
(
I18nUtil
.
getString
(
"jobconf_route_random"
)
,
new
ExecutorRouteRandom
()),
CONSISTENT_HASH
(
I18nUtil
.
getString
(
"jobconf_route_consistenthash"
)
,
new
ExecutorRouteConsistentHash
()),
LEAST_FREQUENTLY_USED
(
I18nUtil
.
getString
(
"jobconf_route_lfu"
)
,
new
ExecutorRouteLFU
()),
LEAST_RECENTLY_USED
(
I18nUtil
.
getString
(
"jobconf_route_lru"
)
,
new
ExecutorRouteLRU
()),
FAILOVER
(
I18nUtil
.
getString
(
"jobconf_route_failover"
)
,
new
ExecutorRouteFailover
()),
BUSYOVER
(
I18nUtil
.
getString
(
"jobconf_route_busyover"
)
,
new
ExecutorRouteBusyover
()),
SHARDING_BROADCAST
(
I18nUtil
.
getString
(
"jobconf_route_shard"
)
,
null
);
ExecutorRouteStrategyEnum
(
String
title
,
ExecutorRouter
router
)
{
this
.
title
=
title
;
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
浏览文件 @
54f6c050
...
...
@@ -3,6 +3,7 @@ package com.xxl.job.admin.core.route.strategy;
import
com.xxl.job.admin.core.route.ExecutorRouter
;
import
com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.admin.core.trigger.XxlJobTrigger
;
import
com.xxl.job.admin.core.util.I18nUtil
;
import
com.xxl.job.core.biz.ExecutorBiz
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.biz.model.TriggerParam
;
...
...
@@ -33,7 +34,7 @@ public class ExecutorRouteBusyover extends ExecutorRouter {
idleBeatResult
=
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
""
+
e
);
}
idleBeatResultSB
.
append
(
(
idleBeatResultSB
.
length
()>
0
)?
"<br><br>"
:
""
)
.
append
(
"空闲检测
:"
)
.
append
(
I18nUtil
.
getString
(
"jobconf_idleBeat"
)
+
"
:"
)
.
append
(
"<br>address:"
).
append
(
address
)
.
append
(
"<br>code:"
).
append
(
idleBeatResult
.
getCode
())
.
append
(
"<br>msg:"
).
append
(
idleBeatResult
.
getMsg
());
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
浏览文件 @
54f6c050
...
...
@@ -3,6 +3,7 @@ package com.xxl.job.admin.core.route.strategy;
import
com.xxl.job.admin.core.route.ExecutorRouter
;
import
com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.admin.core.trigger.XxlJobTrigger
;
import
com.xxl.job.admin.core.util.I18nUtil
;
import
com.xxl.job.core.biz.ExecutorBiz
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.biz.model.TriggerParam
;
...
...
@@ -33,7 +34,7 @@ public class ExecutorRouteFailover extends ExecutorRouter {
beatResult
=
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
""
+
e
);
}
beatResultSB
.
append
(
(
beatResultSB
.
length
()>
0
)?
"<br><br>"
:
""
)
.
append
(
"心跳检测
:"
)
.
append
(
I18nUtil
.
getString
(
"jobconf_beat"
)
+
"
:"
)
.
append
(
"<br>address:"
).
append
(
address
)
.
append
(
"<br>code:"
).
append
(
beatResult
.
getCode
())
.
append
(
"<br>msg:"
).
append
(
beatResult
.
getMsg
());
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
浏览文件 @
54f6c050
...
...
@@ -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.model.XxlJobLog
;
import
com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.admin.core.util.I18nUtil
;
import
com.xxl.job.admin.core.util.MailUtil
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.handler.IJobHandler
;
...
...
@@ -119,14 +120,14 @@ public class JobFailMonitorHelper {
// ---------------------- alarm ----------------------
// email alarm template
private
static
final
String
mailBodyTemplate
=
"<h5>
监控告警明细
:</span>"
+
private
static
final
String
mailBodyTemplate
=
"<h5>
"
+
I18nUtil
.
getString
(
"jobconf_monitor_detail"
)
+
"
:</span>"
+
"<table border=\"1\" cellpadding=\"3\" style=\"border-collapse:collapse; width:80%;\" >\n"
+
" <thead style=\"font-weight: bold;color: #ffffff;background-color: #ff8c00;\" >"
+
" <tr>\n"
+
" <td>
执行器
</td>\n"
+
" <td>
任务ID
</td>\n"
+
" <td>
任务描述
</td>\n"
+
" <td>
告警类型
</td>\n"
+
" <td>
"
+
I18nUtil
.
getString
(
"jobinfo_field_jobgroup"
)
+
"
</td>\n"
+
" <td>
"
+
I18nUtil
.
getString
(
"jobinfo_field_id"
)
+
"
</td>\n"
+
" <td>
"
+
I18nUtil
.
getString
(
"jobinfo_field_jobdesc"
)
+
"
</td>\n"
+
" <td>
"
+
I18nUtil
.
getString
(
"jobconf_monitor_alarm_title"
)
+
"
</td>\n"
+
" </tr>\n"
+
" <thead/>\n"
+
" <tbody>\n"
+
...
...
@@ -134,7 +135,7 @@ public class JobFailMonitorHelper {
" <td>{0}</td>\n"
+
" <td>{1}</td>\n"
+
" <td>{2}</td>\n"
+
" <td>
调度失败
</td>\n"
+
" <td>
"
+
I18nUtil
.
getString
(
"jobconf_monitor_alarm_type"
)
+
"
</td>\n"
+
" </tr>\n"
+
" <tbody>\n"
+
"</table>"
;
...
...
@@ -154,7 +155,7 @@ public class JobFailMonitorHelper {
for
(
String
email:
emailSet
)
{
XxlJobGroup
group
=
XxlJobDynamicScheduler
.
xxlJobGroupDao
.
load
(
Integer
.
valueOf
(
info
.
getJobGroup
()));
String
title
=
"调度中心监控报警"
;
String
title
=
I18nUtil
.
getString
(
"jobconf_monitor"
)
;
String
content
=
MessageFormat
.
format
(
mailBodyTemplate
,
group
!=
null
?
group
.
getTitle
():
"null"
,
info
.
getId
(),
info
.
getJobDesc
());
MailUtil
.
sendMail
(
email
,
title
,
content
);
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
浏览文件 @
54f6c050
...
...
@@ -7,6 +7,7 @@ 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.util.I18nUtil
;
import
com.xxl.job.core.biz.ExecutorBiz
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.biz.model.TriggerParam
;
...
...
@@ -67,17 +68,18 @@ public class XxlJobTrigger {
ReturnT
<
String
>
triggerResult
=
new
ReturnT
<
String
>(
null
);
StringBuffer
triggerMsgSb
=
new
StringBuffer
();
triggerMsgSb
.
append
(
"调度机器:"
).
append
(
IpUtil
.
getIp
());
triggerMsgSb
.
append
(
"<br>执行器-注册方式:"
).
append
(
(
group
.
getAddressType
()
==
0
)?
"自动注册"
:
"手动录入"
);
triggerMsgSb
.
append
(
"<br>执行器-地址列表:"
).
append
(
group
.
getRegistryList
());
triggerMsgSb
.
append
(
"<br>路由策略:"
).
append
(
executorRouteStrategyEnum
.
getTitle
()).
append
(
"("
+
i
+
"/"
+
addressList
.
size
()+
")"
);
// update01
triggerMsgSb
.
append
(
"<br>阻塞处理策略:"
).
append
(
blockStrategy
.
getTitle
());
triggerMsgSb
.
append
(
"<br>失败处理策略:"
).
append
(
failStrategy
.
getTitle
());
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"
)
);
triggerMsgSb
.
append
(
"<br>"
).
append
(
I18nUtil
.
getString
(
"jobconf_trigger_exe_regaddress"
)).
append
(
":"
).
append
(
group
.
getRegistryList
());
triggerMsgSb
.
append
(
"<br>"
).
append
(
I18nUtil
.
getString
(
"jobinfo_field_executorRouteStrategy"
)).
append
(
":"
).
append
(
executorRouteStrategyEnum
.
getTitle
()).
append
(
"("
+
i
+
"/"
+
addressList
.
size
()+
")"
);
// update01
triggerMsgSb
.
append
(
"<br>"
).
append
(
I18nUtil
.
getString
(
"jobinfo_field_executorBlockStrategy"
)).
append
(
":"
).
append
(
blockStrategy
.
getTitle
());
triggerMsgSb
.
append
(
"<br>"
).
append
(
I18nUtil
.
getString
(
"jobinfo_field_executorFailStrategy"
)).
append
(
":"
).
append
(
failStrategy
.
getTitle
());
// 3、trigger-valid
if
(
triggerResult
.
getCode
()==
ReturnT
.
SUCCESS_CODE
&&
CollectionUtils
.
isEmpty
(
addressList
))
{
triggerResult
.
setCode
(
ReturnT
.
FAIL_CODE
);
triggerMsgSb
.
append
(
"<br>----------------------<br>"
).
append
(
"调度失败:"
).
append
(
"执行器地址为空"
);
triggerMsgSb
.
append
(
"<br>----------------------<br>"
).
append
(
I18nUtil
.
getString
(
"jobconf_trigger_address_empty"
)
);
}
if
(
triggerResult
.
getCode
()
==
ReturnT
.
SUCCESS_CODE
)
{
...
...
@@ -97,12 +99,12 @@ public class XxlJobTrigger {
// 4.2、trigger-run (route run / trigger remote executor)
triggerResult
=
runExecutor
(
triggerParam
,
address
);
// update03
triggerMsgSb
.
append
(
"<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>
触发调度
<<<<<<<<<<< </span><br>"
).
append
(
triggerResult
.
getMsg
());
triggerMsgSb
.
append
(
"<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>
"
+
I18nUtil
.
getString
(
"jobconf_trigger_run"
)
+
"
<<<<<<<<<<< </span><br>"
).
append
(
triggerResult
.
getMsg
());
// 4.3、trigger (fail retry)
if
(
triggerResult
.
getCode
()!=
ReturnT
.
SUCCESS_CODE
&&
failStrategy
==
ExecutorFailStrategyEnum
.
FAIL_RETRY
)
{
triggerResult
=
runExecutor
(
triggerParam
,
address
);
// update04
triggerMsgSb
.
append
(
"<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>
失败重试
<<<<<<<<<<< </span><br>"
).
append
(
triggerResult
.
getMsg
());
triggerMsgSb
.
append
(
"<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>
"
+
I18nUtil
.
getString
(
"jobconf_fail_retry"
)
+
"
<<<<<<<<<<< </span><br>"
).
append
(
triggerResult
.
getMsg
());
}
}
...
...
@@ -134,17 +136,18 @@ public class XxlJobTrigger {
ReturnT
<
String
>
triggerResult
=
new
ReturnT
<
String
>(
null
);
StringBuffer
triggerMsgSb
=
new
StringBuffer
();
triggerMsgSb
.
append
(
"调度机器:"
).
append
(
IpUtil
.
getIp
());
triggerMsgSb
.
append
(
"<br>执行器-注册方式:"
).
append
(
(
group
.
getAddressType
()
==
0
)?
"自动注册"
:
"手动录入"
);
triggerMsgSb
.
append
(
"<br>执行器-地址列表:"
).
append
(
group
.
getRegistryList
());
triggerMsgSb
.
append
(
"<br>路由策略:"
).
append
(
executorRouteStrategyEnum
.
getTitle
());
triggerMsgSb
.
append
(
"<br>阻塞处理策略:"
).
append
(
blockStrategy
.
getTitle
());
triggerMsgSb
.
append
(
"<br>失败处理策略:"
).
append
(
failStrategy
.
getTitle
());
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"
)
);
triggerMsgSb
.
append
(
"<br>"
).
append
(
I18nUtil
.
getString
(
"jobconf_trigger_exe_regaddress"
)).
append
(
":"
).
append
(
group
.
getRegistryList
());
triggerMsgSb
.
append
(
"<br>"
).
append
(
I18nUtil
.
getString
(
"jobinfo_field_executorRouteStrategy"
)).
append
(
":"
).
append
(
executorRouteStrategyEnum
.
getTitle
());
triggerMsgSb
.
append
(
"<br>"
).
append
(
I18nUtil
.
getString
(
"jobinfo_field_executorBlockStrategy"
)).
append
(
":"
).
append
(
blockStrategy
.
getTitle
());
triggerMsgSb
.
append
(
"<br>"
).
append
(
I18nUtil
.
getString
(
"jobinfo_field_executorFailStrategy"
)).
append
(
":"
).
append
(
failStrategy
.
getTitle
());
// 3、trigger-valid
if
(
triggerResult
.
getCode
()==
ReturnT
.
SUCCESS_CODE
&&
CollectionUtils
.
isEmpty
(
addressList
))
{
triggerResult
.
setCode
(
ReturnT
.
FAIL_CODE
);
triggerMsgSb
.
append
(
"<br>----------------------<br>"
).
append
(
"调度失败:"
).
append
(
"执行器地址为空"
);
triggerMsgSb
.
append
(
"<br>----------------------<br>"
).
append
(
I18nUtil
.
getString
(
"jobconf_trigger_address_empty"
)
);
}
if
(
triggerResult
.
getCode
()
==
ReturnT
.
SUCCESS_CODE
)
{
...
...
@@ -164,12 +167,12 @@ public class XxlJobTrigger {
// 4.2、trigger-run (route run / trigger remote executor)
triggerResult
=
executorRouteStrategyEnum
.
getRouter
().
routeRun
(
triggerParam
,
addressList
);
triggerMsgSb
.
append
(
"<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>
触发调度
<<<<<<<<<<< </span><br>"
).
append
(
triggerResult
.
getMsg
());
triggerMsgSb
.
append
(
"<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>
"
+
I18nUtil
.
getString
(
"jobconf_trigger_run"
)
+
"
<<<<<<<<<<< </span><br>"
).
append
(
triggerResult
.
getMsg
());
// 4.3、trigger (fail retry)
if
(
triggerResult
.
getCode
()!=
ReturnT
.
SUCCESS_CODE
&&
failStrategy
==
ExecutorFailStrategyEnum
.
FAIL_RETRY
)
{
triggerResult
=
executorRouteStrategyEnum
.
getRouter
().
routeRun
(
triggerParam
,
addressList
);
triggerMsgSb
.
append
(
"<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>
调度失败重试
<<<<<<<<<<< </span><br>"
).
append
(
triggerResult
.
getMsg
());
triggerMsgSb
.
append
(
"<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>
"
+
I18nUtil
.
getString
(
"jobconf_fail_retry"
)
+
"
<<<<<<<<<<< </span><br>"
).
append
(
triggerResult
.
getMsg
());
}
}
...
...
@@ -202,7 +205,7 @@ public class XxlJobTrigger {
runResult
=
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
""
+
e
);
}
StringBuffer
runResultSB
=
new
StringBuffer
(
"触发调度
:"
);
StringBuffer
runResultSB
=
new
StringBuffer
(
I18nUtil
.
getString
(
"jobconf_trigger_run"
)
+
"
:"
);
runResultSB
.
append
(
"<br>address:"
).
append
(
address
);
runResultSB
.
append
(
"<br>code:"
).
append
(
runResult
.
getCode
());
runResultSB
.
append
(
"<br>msg:"
).
append
(
runResult
.
getMsg
());
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
浏览文件 @
54f6c050
...
...
@@ -5,6 +5,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.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.admin.core.util.I18nUtil
;
import
com.xxl.job.admin.dao.XxlJobGroupDao
;
import
com.xxl.job.admin.dao.XxlJobInfoDao
;
import
com.xxl.job.admin.dao.XxlJobLogDao
;
...
...
@@ -71,31 +72,31 @@ public class XxlJobServiceImpl implements XxlJobService {
// valid
XxlJobGroup
group
=
xxlJobGroupDao
.
load
(
jobInfo
.
getJobGroup
());
if
(
group
==
null
)
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"请选择“执行器”"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
(
I18nUtil
.
getString
(
"system_please_choose"
)+
I18nUtil
.
getString
(
"jobinfo_field_jobgroup"
))
);
}
if
(!
CronExpression
.
isValidExpression
(
jobInfo
.
getJobCron
()))
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"请输入格式正确的“Cron”"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
I18nUtil
.
getString
(
"jobinfo_field_cron_unvalid"
)
);
}
if
(
StringUtils
.
isBlank
(
jobInfo
.
getJobDesc
()))
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"请输入“任务描述”"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
(
I18nUtil
.
getString
(
"system_please_input"
)+
I18nUtil
.
getString
(
"jobinfo_field_jobdesc"
))
);
}
if
(
StringUtils
.
isBlank
(
jobInfo
.
getAuthor
()))
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"请输入“负责人”"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
(
I18nUtil
.
getString
(
"system_please_input"
)+
I18nUtil
.
getString
(
"jobinfo_field_author"
))
);
}
if
(
ExecutorRouteStrategyEnum
.
match
(
jobInfo
.
getExecutorRouteStrategy
(),
null
)
==
null
)
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"路由策略非法"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
(
I18nUtil
.
getString
(
"jobinfo_field_executorRouteStrategy"
)+
I18nUtil
.
getString
(
"system_unvalid"
))
);
}
if
(
ExecutorBlockStrategyEnum
.
match
(
jobInfo
.
getExecutorBlockStrategy
(),
null
)
==
null
)
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"阻塞处理策略非法"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
(
I18nUtil
.
getString
(
"jobinfo_field_executorBlockStrategy"
)+
I18nUtil
.
getString
(
"system_unvalid"
))
);
}
if
(
ExecutorFailStrategyEnum
.
match
(
jobInfo
.
getExecutorFailStrategy
(),
null
)
==
null
)
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"失败处理策略非法"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
(
I18nUtil
.
getString
(
"jobinfo_field_executorFailStrategy"
)+
I18nUtil
.
getString
(
"system_unvalid"
))
);
}
if
(
GlueTypeEnum
.
match
(
jobInfo
.
getGlueType
())
==
null
)
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"运行模式非法非法"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
(
I18nUtil
.
getString
(
"jobinfo_field_gluetype"
)+
I18nUtil
.
getString
(
"system_unvalid"
))
);
}
if
(
GlueTypeEnum
.
BEAN
==
GlueTypeEnum
.
match
(
jobInfo
.
getGlueType
())
&&
StringUtils
.
isBlank
(
jobInfo
.
getExecutorHandler
()))
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"请输入“JobHandler”"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
(
I18nUtil
.
getString
(
"system_please_input"
)+
"JobHandler"
)
);
}
// fix "\r" in shell
...
...
@@ -110,10 +111,12 @@ public class XxlJobServiceImpl implements XxlJobService {
if
(
StringUtils
.
isNotBlank
(
childJobIdItem
)
&&
StringUtils
.
isNumeric
(
childJobIdItem
))
{
XxlJobInfo
childJobInfo
=
xxlJobInfoDao
.
loadById
(
Integer
.
valueOf
(
childJobIdItem
));
if
(
childJobInfo
==
null
)
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
MessageFormat
.
format
(
"子任务ID({0})无效"
,
childJobIdItem
));
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
MessageFormat
.
format
((
I18nUtil
.
getString
(
"jobinfo_field_childJobId"
)+
"({0})"
+
I18nUtil
.
getString
(
"system_not_found"
)),
childJobIdItem
));
}
}
else
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
MessageFormat
.
format
(
"子任务ID({0})格式错误"
,
childJobIdItem
));
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
MessageFormat
.
format
((
I18nUtil
.
getString
(
"jobinfo_field_childJobId"
)+
"({0})"
+
I18nUtil
.
getString
(
"system_unvalid"
)),
childJobIdItem
));
}
}
jobInfo
.
setChildJobId
(
StringUtils
.
join
(
childJobIds
,
","
));
...
...
@@ -122,7 +125,7 @@ public class XxlJobServiceImpl implements XxlJobService {
// add in db
xxlJobInfoDao
.
save
(
jobInfo
);
if
(
jobInfo
.
getId
()
<
1
)
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"新增任务失败"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
(
I18nUtil
.
getString
(
"jobinfo_field_add"
)+
I18nUtil
.
getString
(
"system_fail"
))
);
}
// add in quartz
...
...
@@ -140,7 +143,7 @@ public class XxlJobServiceImpl implements XxlJobService {
}
catch
(
SchedulerException
e1
)
{
logger
.
error
(
e
.
getMessage
(),
e1
);
}
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"新增任务失败
:"
+
e
.
getMessage
());
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
(
I18nUtil
.
getString
(
"jobinfo_field_add"
)+
I18nUtil
.
getString
(
"system_fail"
))+
"
:"
+
e
.
getMessage
());
}
}
...
...
@@ -149,22 +152,22 @@ public class XxlJobServiceImpl implements XxlJobService {
// valid
if
(!
CronExpression
.
isValidExpression
(
jobInfo
.
getJobCron
()))
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"请输入格式正确的“Cron”"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
I18nUtil
.
getString
(
"jobinfo_field_cron_unvalid"
)
);
}
if
(
StringUtils
.
isBlank
(
jobInfo
.
getJobDesc
()))
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"请输入“任务描述”"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
(
I18nUtil
.
getString
(
"system_please_input"
)+
I18nUtil
.
getString
(
"jobinfo_field_jobdesc"
))
);
}
if
(
StringUtils
.
isBlank
(
jobInfo
.
getAuthor
()))
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"请输入“负责人”"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
(
I18nUtil
.
getString
(
"system_please_input"
)+
I18nUtil
.
getString
(
"jobinfo_field_author"
))
);
}
if
(
ExecutorRouteStrategyEnum
.
match
(
jobInfo
.
getExecutorRouteStrategy
(),
null
)
==
null
)
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"路由策略非法"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
(
I18nUtil
.
getString
(
"jobinfo_field_executorRouteStrategy"
)+
I18nUtil
.
getString
(
"system_unvalid"
))
);
}
if
(
ExecutorBlockStrategyEnum
.
match
(
jobInfo
.
getExecutorBlockStrategy
(),
null
)
==
null
)
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"阻塞处理策略非法"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
(
I18nUtil
.
getString
(
"jobinfo_field_executorBlockStrategy"
)+
I18nUtil
.
getString
(
"system_unvalid"
))
);
}
if
(
ExecutorFailStrategyEnum
.
match
(
jobInfo
.
getExecutorFailStrategy
(),
null
)
==
null
)
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"失败处理策略非法"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
(
I18nUtil
.
getString
(
"jobinfo_field_executorFailStrategy"
)+
I18nUtil
.
getString
(
"system_unvalid"
))
);
}
// ChildJobId valid
...
...
@@ -174,14 +177,16 @@ public class XxlJobServiceImpl implements XxlJobService {
if
(
StringUtils
.
isNotBlank
(
childJobIdItem
)
&&
StringUtils
.
isNumeric
(
childJobIdItem
))
{
XxlJobInfo
childJobInfo
=
xxlJobInfoDao
.
loadById
(
Integer
.
valueOf
(
childJobIdItem
));
if
(
childJobInfo
==
null
)
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
MessageFormat
.
format
(
"子任务ID({0})无效"
,
childJobIdItem
));
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
MessageFormat
.
format
((
I18nUtil
.
getString
(
"jobinfo_field_childJobId"
)+
"({0})"
+
I18nUtil
.
getString
(
"system_not_found"
)),
childJobIdItem
));
}
// avoid cycle relate
if
(
childJobInfo
.
getId
()
==
jobInfo
.
getId
())
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
MessageFormat
.
format
(
"子任务ID({0})不可与父任务重复"
,
childJobIdItem
));
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
MessageFormat
.
format
(
I18nUtil
.
getString
(
"jobinfo_field_childJobId_limit"
)
,
childJobIdItem
));
}
}
else
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
MessageFormat
.
format
(
"子任务ID({0})格式错误"
,
childJobIdItem
));
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
MessageFormat
.
format
((
I18nUtil
.
getString
(
"jobinfo_field_childJobId"
)+
"({0})"
+
I18nUtil
.
getString
(
"system_unvalid"
)),
childJobIdItem
));
}
}
jobInfo
.
setChildJobId
(
StringUtils
.
join
(
childJobIds
,
","
));
...
...
@@ -190,7 +195,7 @@ public class XxlJobServiceImpl implements XxlJobService {
// stage job info
XxlJobInfo
exists_jobInfo
=
xxlJobInfoDao
.
loadById
(
jobInfo
.
getId
());
if
(
exists_jobInfo
==
null
)
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"参数异常"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
(
I18nUtil
.
getString
(
"jobinfo_field_id"
)+
I18nUtil
.
getString
(
"system_not_found"
))
);
}
//String old_cron = exists_jobInfo.getJobCron();
...
...
@@ -271,7 +276,7 @@ public class XxlJobServiceImpl implements XxlJobService {
public
ReturnT
<
String
>
triggerJob
(
int
id
)
{
XxlJobInfo
xxlJobInfo
=
xxlJobInfoDao
.
loadById
(
id
);
if
(
xxlJobInfo
==
null
)
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"任务ID非法"
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
(
I18nUtil
.
getString
(
"jobinfo_field_id"
)+
I18nUtil
.
getString
(
"system_unvalid"
))
);
}
String
group
=
String
.
valueOf
(
xxlJobInfo
.
getJobGroup
());
...
...
xxl-job-admin/src/main/resources/i18n/message.properties
浏览文件 @
54f6c050
...
...
@@ -12,6 +12,7 @@ system_search=搜索
system_status
=
状态
system_opt
=
操作
system_please_input
=
请输入
system_please_choose
=
请选择
system_success
=
成功
system_fail
=
失败
system_add_suc
=
新增成功
...
...
@@ -26,6 +27,8 @@ system_opt_suc=操作成功
system_opt_fail
=
操作失败
system_opt_edit
=
编辑
system_opt_del
=
删除
system_unvalid
=
非法
system_not_found
=
不存在
## daterangepicker
daterangepicker_ranges_recent_hour
=
最近一小时
...
...
@@ -58,7 +61,6 @@ dataTable_sLast=末页
dataTable_sSortAscending
=
: 以升序排列此列
dataTable_sSortDescending
=
: 以降序排列此列
## login
login_btn
=
登录
login_remember_me
=
记住密码
...
...
@@ -70,6 +72,8 @@ login_password_empty=请输入登录密码
login_password_lt_5
=
登录密码不应低于5位
login_success
=
登录成功
login_fail
=
登录失败
login_param_empty
=
账号或密码为空
login_param_unvalid
=
账号或密码错误
## logout
logout_btn
=
注销
...
...
@@ -104,11 +108,13 @@ jobinfo_field_jobgroup=执行器
jobinfo_field_jobdesc
=
任务描述
jobinfo_field_gluetype
=
运行模式
jobinfo_field_executorparam
=
任务参数
jobinfo_field_cron_unvalid
=
请输入格式正确的Cron
jobinfo_field_author
=
负责人
jobinfo_field_alarmemail
=
报警邮件
jobinfo_field_alarmemail_placeholder
=
请输入报警邮件,多个邮件地址则逗号分隔
jobinfo_field_executorRouteStrategy
=
路由策略
jobinfo_field_childJobId
=
子任务ID
jobinfo_field_childJobId_limit
=
子任务ID({0})不可与父任务重复
jobinfo_field_childJobId_placeholder
=
请输入子任务的任务ID,如存在多个则逗号分隔
jobinfo_field_executorBlockStrategy
=
阻塞处理策略
jobinfo_field_executorFailStrategy
=
失败处理策略
...
...
@@ -122,6 +128,8 @@ jobinfo_opt_run=执行
jobinfo_glue_remark
=
源码备注
jobinfo_glue_remark_limit
=
源码备注长度限制为4~100
jobinfo_glue_rollback
=
版本回溯
jobinfo_glue_jobid_unvalid
=
任务ID非法
jobinfo_glue_gluetype_unvalid
=
该任务非GLUE模式
## job log
joblog_name
=
调度日志
...
...
@@ -149,14 +157,18 @@ joblog_clean_type_6=清理一万条以前日志数据
joblog_clean_type_7
=
清理三万条以前日志数据
joblog_clean_type_8
=
清理十万条以前日志数据
joblog_clean_type_9
=
清理所有日志数据
joblog_clean_type_unvalid
=
清理类型参数异常
joblog_handleCode_200
=
成功
joblog_handleCode_500
=
失败
joblog_handleCode_501
=
失败重试
joblog_kill_log
=
终止任务
joblog_kill_log_limit
=
调度失败,无法终止日志
joblog_kill_log_byman
=
人为操作主动终止
joblog_rolling_log
=
执行日志
joblog_rolling_log_refresh
=
刷新
joblog_rolling_log_triggerfail
=
任务发起调度失败,无法查看执行日志
joblog_rolling_log_failoften
=
终止请求Rolling日志,请求失败次数超上限,可刷新页面重新加载日志
joblog_logid_unvalid
=
日志ID非法
## job group
jobgroup_name
=
执行器管理
...
...
@@ -169,14 +181,43 @@ jobgroup_field_title=名称
jobgroup_field_addressType
=
注册方式
jobgroup_field_addressType_0
=
自动注册
jobgroup_field_addressType_1
=
手动录入
jobgroup_field_addressType_limit
=
手动录入注册方式,机器地址不可为空
jobgroup_field_registryList
=
机器地址
jobgroup_field_registryList_unvalid
=
机器地址格式非法
jobgroup_field_registryList_placeholder
=
请输入执行器地址列表,多地址逗号分隔
jobgroup_field_appName_limit
=
限制以小写字母开头,由小写字母、数字和中划线组成
jobgroup_field_appName_length
=
AppName长度限制为4~64
jobgroup_field_title_length
=
名称长度限制为4~12
jobgroup_field_order_digits
=
请输入整数
jobgroup_field_orderrange
=
取值范围为1~1000
jobgroup_del_limit_0
=
拒绝删除,该执行器使用中
jobgroup_del_limit_1
=
拒绝删除, 系统至少保留一个执行器
## job conf
jobconf_fail_alarm
=
失败告警
jobconf_fail_retry
=
失败重试
jobconf_route_first
=
第一个
jobconf_route_last
=
最后一个
jobconf_route_round
=
轮询
jobconf_route_random
=
随机
jobconf_route_consistenthash
=
一致性HASH
jobconf_route_lfu
=
最不经常使用
jobconf_route_lru
=
最近最久未使用
jobconf_route_failover
=
故障转移
jobconf_route_busyover
=
忙碌转移
jobconf_route_shard
=
分片广播
jobconf_idleBeat
=
空闲检测
jobconf_beat
=
心跳检测
jobconf_monitor
=
调度中心监控报警
jobconf_monitor_detail
=
监控告警明细
jobconf_monitor_alarm_title
=
告警类型
jobconf_monitor_alarm_type
=
调度失败
jobconf_trigger_admin_adress
=
调度机器
jobconf_trigger_exe_regtype
=
执行器-注册方式
jobconf_trigger_exe_regaddress
=
执行器-地址列表
jobconf_trigger_address_empty
=
调度失败:执行器地址为空
jobconf_trigger_run
=
触发调度
## help
job_help
=
使用教程
job_help_document
=
官方文档
job_help_document
=
官方文档
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论