接入执行器,自动注册

This commit is contained in:
xueli.xue 2016-10-03 16:40:31 +08:00
parent eb369ec67e
commit 9c05c3a96f
8 changed files with 48 additions and 92 deletions

View File

@ -53,7 +53,7 @@ public class JobInfoController {
int glueSwitch, String glueSource, String glueRemark, String childJobKey) { int glueSwitch, String glueSource, String glueRemark, String childJobKey) {
return xxlJobService.add(jobGroup, jobCron, jobDesc, author, alarmEmail, return xxlJobService.add(jobGroup, jobCron, jobDesc, author, alarmEmail,
executorAppname, executorAddress, executorHandler, executorParam, executorAddress, executorHandler, executorParam,
glueSwitch, glueSource, glueRemark, childJobKey); glueSwitch, glueSource, glueRemark, childJobKey);
} }
@ -64,7 +64,7 @@ public class JobInfoController {
int glueSwitch, String childJobKey) { int glueSwitch, String childJobKey) {
return xxlJobService.reschedule(jobGroup, jobName, jobCron, jobDesc, author, alarmEmail, return xxlJobService.reschedule(jobGroup, jobName, jobCron, jobDesc, author, alarmEmail,
executorAppname, executorAddress, executorHandler, executorParam, glueSwitch, childJobKey); executorAddress, executorHandler, executorParam, glueSwitch, childJobKey);
} }
@RequestMapping("/remove") @RequestMapping("/remove")

View File

@ -1,6 +1,7 @@
package com.xxl.job.admin.core.jobbean; package com.xxl.job.admin.core.jobbean;
import com.xxl.job.admin.core.callback.XxlJobLogCallbackServer; import com.xxl.job.admin.core.callback.XxlJobLogCallbackServer;
import com.xxl.job.admin.core.model.XxlJobGroup;
import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.core.model.XxlJobInfo;
import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.core.model.XxlJobLog;
import com.xxl.job.admin.core.thread.JobMonitorHelper; import com.xxl.job.admin.core.thread.JobMonitorHelper;
@ -67,13 +68,16 @@ public class RemoteHttpJobBean extends QuartzJobBean {
// parse address // parse address
List<String> addressList = new ArrayList<String>(); List<String> addressList = new ArrayList<String>();
String parseAddressMsg = null; String parseAddressMsg = null;
if (StringUtils.isNotBlank(jobInfo.getExecutorAppname())) { if (StringUtils.isNotBlank(jobInfo.getExecutorAddress())) {
addressList = JobRegistryHelper.discover(RegistHelper.RegistType.EXECUTOR.name(), jobInfo.getExecutorAppname());
parseAddressMsg = MessageFormat.format("Parse Address (Appname注册方式) <br>>>>[address list] : {0}<br><hr>", addressList);
} else {
List<String> addressArr = Arrays.asList(jobInfo.getExecutorAddress().split(",")); List<String> addressArr = Arrays.asList(jobInfo.getExecutorAddress().split(","));
addressList.addAll(addressArr); addressList.addAll(addressArr);
parseAddressMsg = MessageFormat.format("Parse Address (地址配置方式) <br>>>>[address list] : {0}<br><hr>", addressList); parseAddressMsg = MessageFormat.format("Parse Address (地址配置方式) <br>>>>[address list] : {0}<br><hr>", addressList);
} else {
XxlJobGroup group = DynamicSchedulerUtil.xxlJobGroupDao.load(jobInfo.getJobGroup());
if (group!=null) {
addressList = JobRegistryHelper.discover(RegistHelper.RegistType.EXECUTOR.name(), group.getAppName());
}
parseAddressMsg = MessageFormat.format("Parse Address (Appname注册方式) <br>>>>[address list] : {0}<br><hr>", addressList);
} }
// failover trigger // failover trigger

View File

@ -21,7 +21,6 @@ public class XxlJobInfo {
private String author; // 负责人 private String author; // 负责人
private String alarmEmail; // 报警邮件 private String alarmEmail; // 报警邮件
private String executorAppname; // 执行器对应的AppName
private String executorAddress; // 执行器地址有多个则逗号分隔 private String executorAddress; // 执行器地址有多个则逗号分隔
private String executorHandler; // 执行器任务Handler名称 private String executorHandler; // 执行器任务Handler名称
private String executorParam; // 执行器任务参数 private String executorParam; // 执行器任务参数
@ -107,14 +106,6 @@ public class XxlJobInfo {
this.alarmEmail = alarmEmail; this.alarmEmail = alarmEmail;
} }
public String getExecutorAppname() {
return executorAppname;
}
public void setExecutorAppname(String executorAppname) {
this.executorAppname = executorAppname;
}
public String getExecutorAddress() { public String getExecutorAddress() {
return executorAddress; return executorAddress;
} }

View File

@ -14,11 +14,11 @@ public interface IXxlJobService {
public Map<String, Object> pageList(int start, int length, String jobGroup, String executorHandler, String filterTime); public Map<String, Object> pageList(int start, int length, String jobGroup, String executorHandler, String filterTime);
public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,String author, String alarmEmail, public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,String author, String alarmEmail,
String executorAppname, String executorAddress, String executorHandler, String executorParam, String executorAddress, String executorHandler, String executorParam,
int glueSwitch, String glueSource, String glueRemark, String childJobKey); int glueSwitch, String glueSource, String glueRemark, String childJobKey);
public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc, String author, String alarmEmail, public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc, String author, String alarmEmail,
String executorAppname, String executorAddress, String executorHandler, String executorParam, int glueSwitch, String childJobKey); String executorAddress, String executorHandler, String executorParam, int glueSwitch, String childJobKey);
public ReturnT<String> remove(String jobGroup, String jobName); public ReturnT<String> remove(String jobGroup, String jobName);

View File

@ -65,7 +65,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
@Override @Override
public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,String author, String alarmEmail, public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,String author, String alarmEmail,
String executorAppname, String executorAddress, String executorHandler, String executorParam, String executorAddress, String executorHandler, String executorParam,
int glueSwitch, String glueSource, String glueRemark, String childJobKey) { int glueSwitch, String glueSource, String glueRemark, String childJobKey) {
// valid // valid
XxlJobGroup group = xxlJobGroupDao.load(jobGroup); XxlJobGroup group = xxlJobGroupDao.load(jobGroup);
@ -84,12 +84,6 @@ public class XxlJobServiceImpl implements IXxlJobService {
if (StringUtils.isBlank(alarmEmail)) { if (StringUtils.isBlank(alarmEmail)) {
return new ReturnT<String>(500, "请输入“报警邮件”"); return new ReturnT<String>(500, "请输入“报警邮件”");
} }
if (StringUtils.isBlank(executorAppname) && StringUtils.isBlank(executorAddress)) {
return new ReturnT<String>(500, "“执行器AppName”和“执行器地址”不可同时为空");
}
if (StringUtils.isNotBlank(executorAppname) && StringUtils.isNotBlank(executorAddress)) {
return new ReturnT<String>(500, "“执行器AppName”和“执行器地址” 不可同时使用");
}
if (glueSwitch==0 && StringUtils.isBlank(executorHandler)) { if (glueSwitch==0 && StringUtils.isBlank(executorHandler)) {
return new ReturnT<String>(500, "请输入“JobHandler”"); return new ReturnT<String>(500, "请输入“JobHandler”");
} }
@ -128,7 +122,6 @@ public class XxlJobServiceImpl implements IXxlJobService {
jobInfo.setJobDesc(jobDesc); jobInfo.setJobDesc(jobDesc);
jobInfo.setAuthor(author); jobInfo.setAuthor(author);
jobInfo.setAlarmEmail(alarmEmail); jobInfo.setAlarmEmail(alarmEmail);
jobInfo.setExecutorAppname(executorAppname);
jobInfo.setExecutorAddress(executorAddress); jobInfo.setExecutorAddress(executorAddress);
jobInfo.setExecutorHandler(executorHandler); jobInfo.setExecutorHandler(executorHandler);
jobInfo.setExecutorParam(executorParam); jobInfo.setExecutorParam(executorParam);
@ -154,7 +147,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
@Override @Override
public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc, String author, String alarmEmail, public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc, String author, String alarmEmail,
String executorAppname, String executorAddress, String executorHandler, String executorParam, int glueSwitch, String childJobKey) { String executorAddress, String executorHandler, String executorParam, int glueSwitch, String childJobKey) {
// valid // valid
XxlJobGroup group = xxlJobGroupDao.load(jobGroup); XxlJobGroup group = xxlJobGroupDao.load(jobGroup);
@ -176,12 +169,6 @@ public class XxlJobServiceImpl implements IXxlJobService {
if (StringUtils.isBlank(alarmEmail)) { if (StringUtils.isBlank(alarmEmail)) {
return new ReturnT<String>(500, "请输入“报警邮件”"); return new ReturnT<String>(500, "请输入“报警邮件”");
} }
if (StringUtils.isBlank(executorAppname) && StringUtils.isBlank(executorAddress)) {
return new ReturnT<String>(500, "“执行器AppName”和“执行器地址”不可同时为空");
}
if (StringUtils.isNotBlank(executorAppname) && StringUtils.isNotBlank(executorAddress)) {
return new ReturnT<String>(500, "“执行器AppName”和“执行器地址” 不可同时使用");
}
if (glueSwitch==0 && StringUtils.isBlank(executorHandler)) { if (glueSwitch==0 && StringUtils.isBlank(executorHandler)) {
return new ReturnT<String>(500, "请输入“JobHandler”"); return new ReturnT<String>(500, "请输入“JobHandler”");
} }
@ -207,7 +194,6 @@ public class XxlJobServiceImpl implements IXxlJobService {
jobInfo.setJobDesc(jobDesc); jobInfo.setJobDesc(jobDesc);
jobInfo.setAuthor(author); jobInfo.setAuthor(author);
jobInfo.setAlarmEmail(alarmEmail); jobInfo.setAlarmEmail(alarmEmail);
jobInfo.setExecutorAppname(executorAppname);
jobInfo.setExecutorAddress(executorAddress); jobInfo.setExecutorAddress(executorAddress);
jobInfo.setExecutorHandler(executorHandler); jobInfo.setExecutorHandler(executorHandler);
jobInfo.setExecutorParam(executorParam); jobInfo.setExecutorParam(executorParam);

View File

@ -17,7 +17,6 @@
<result column="author" property="author" /> <result column="author" property="author" />
<result column="alarm_email" property="alarmEmail" /> <result column="alarm_email" property="alarmEmail" />
<result column="executor_appname" property="executorAppname" />
<result column="executor_address" property="executorAddress" /> <result column="executor_address" property="executorAddress" />
<result column="executor_handler" property="executorHandler" /> <result column="executor_handler" property="executorHandler" />
<result column="executor_param" property="executorParam" /> <result column="executor_param" property="executorParam" />
@ -39,7 +38,6 @@
t.update_time, t.update_time,
t.author, t.author,
t.alarm_email, t.alarm_email,
t.executor_appname,
t.executor_address, t.executor_address,
t.executor_handler, t.executor_handler,
t.executor_param, t.executor_param,
@ -87,7 +85,6 @@
update_time, update_time,
author, author,
alarm_email, alarm_email,
executor_appname,
executor_address, executor_address,
executor_handler, executor_handler,
executor_param, executor_param,
@ -104,7 +101,6 @@
NOW(), NOW(),
#{author}, #{author},
#{alarmEmail}, #{alarmEmail},
#{executorAppname},
#{executorAddress}, #{executorAddress},
#{executorHandler}, #{executorHandler},
#{executorParam}, #{executorParam},
@ -133,7 +129,6 @@
update_time = NOW(), update_time = NOW(),
author = #{author}, author = #{author},
alarm_email = #{alarmEmail}, alarm_email = #{alarmEmail},
executor_appname = #{executorAppname},
executor_address = #{executorAddress}, executor_address = #{executorAddress},
executor_handler = #{executorHandler}, executor_handler = #{executorHandler},
executor_param = #{executorParam}, executor_param = #{executorParam},

View File

@ -78,7 +78,6 @@
<th name="childJobKey" >任务Key</th> <th name="childJobKey" >任务Key</th>
<th name="jobDesc" >描述</th> <th name="jobDesc" >描述</th>
<th name="jobCron" >Cron</th> <th name="jobCron" >Cron</th>
<th name="executorAppname" >执行器Appname</th>
<th name="executorAddress" >执行器地址</th> <th name="executorAddress" >执行器地址</th>
<th name="executorHandler" >JobJandler</th> <th name="executorHandler" >JobJandler</th>
<th name="executorParam" >任务参数</th> <th name="executorParam" >任务参数</th>
@ -127,14 +126,13 @@
<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">
<div class="executorAddress"> <label for="lastname" class="col-sm-2 control-label">执行器地址<font color="black">*</font></label>
<label for="lastname" class="col-sm-2 control-label">执行器地址<font color="red">*</font></label> <div class="col-sm-4">
<div class="col-sm-4"><input type="text" class="form-control" name="executorAddress" placeholder="请输入“执行器地址”,多个地址逗号分隔" maxlength="50" ></div> <div class="input-group">
</div> <input type="text" class="form-control" name="executorAddress" placeholder="请输入“执行器地址”,多个地址逗号分隔" maxlength="50" readonly >
<div class="executorAppname" style="display:none;"> <span class="input-group-addon"><b>AUTO</b>&nbsp;<input type="checkbox" class="addressAuto" checked="checked" ></span>
<label for="lastname" class="col-sm-2 control-label">AppName<font color="red">*</font></label> </div>
<div class="col-sm-4"><input type="text" class="form-control" name="executorAppname" placeholder="请输入执行器对应Appname, 自动发现注册的人任务" maxlength="100" ></div> </div>
</div>
<label for="lastname" class="col-sm-2 control-label">Cron<font color="red">*</font></label> <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 class="col-sm-4"><input type="text" class="form-control" name="jobCron" placeholder="请输入“Cron”" maxlength="20" ></div>
</div> </div>
@ -166,9 +164,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-offset-0 col-sm-3">
启动注册&nbsp;<input type="checkbox" class="ifAppName" >
</div>
</div> </div>
<input type="hidden" name="glueRemark" value="GLUE代码初始化" > <input type="hidden" name="glueRemark" value="GLUE代码初始化" >
@ -215,14 +210,13 @@ public class DemoGlueJobHandler 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">
<div class="executorAddress"> <label for="lastname" class="col-sm-2 control-label">执行器地址<font color="black">*</font></label>
<label for="lastname" class="col-sm-2 control-label">执行器地址<font color="red">*</font></label> <div class="col-sm-4">
<div class="col-sm-4"><input type="text" class="form-control" name="executorAddress" placeholder="请输入“执行器地址”,多个地址逗号分隔" maxlength="50" ></div> <div class="input-group">
</div> <input type="text" class="form-control" name="executorAddress" placeholder="请输入“执行器地址”,多个地址逗号分隔" maxlength="50" >
<div class="executorAppname" style="display:none;"> <span class="input-group-addon"><b>AUTO</b>&nbsp;<input type="checkbox" class="addressAuto" checked="checked" ></span>
<label for="lastname" class="col-sm-2 control-label">AppName<font color="red">*</font></label> </div>
<div class="col-sm-4"><input type="text" class="form-control" name="executorAppname" placeholder="请输入执行器对应Appname, 自动发现注册的人任务" maxlength="100" ></div> </div>
</div>
<label for="lastname" class="col-sm-2 control-label">Cron<font color="red">*</font></label> <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 class="col-sm-4"><input type="text" class="form-control" name="jobCron" placeholder="请输入“Cron”" maxlength="20" ></div>
</div> </div>

View File

@ -45,7 +45,6 @@ $(function() {
}, },
{ "data": 'jobDesc', "visible" : true}, { "data": 'jobDesc', "visible" : true},
{ "data": 'jobCron', "visible" : true}, { "data": 'jobCron', "visible" : true},
{ "data": 'executorAppname', "visible" : false},
{ "data": 'executorAddress', "visible" : false}, { "data": 'executorAddress', "visible" : false},
{ {
"data": 'executorHandler', "data": 'executorHandler',
@ -114,7 +113,6 @@ $(function() {
' jobDesc="'+ row.jobDesc +'" '+ ' jobDesc="'+ row.jobDesc +'" '+
' author="'+ row.author +'" '+ ' author="'+ row.author +'" '+
' alarmEmail="'+ row.alarmEmail +'" '+ ' alarmEmail="'+ row.alarmEmail +'" '+
' executorAppname="'+row.executorAppname +'" '+
' executorAddress="'+row.executorAddress +'" '+ ' executorAddress="'+row.executorAddress +'" '+
' executorHandler="'+row.executorHandler +'" '+ ' executorHandler="'+row.executorHandler +'" '+
' executorParam="'+ row.executorParam +'" '+ ' executorParam="'+ row.executorParam +'" '+
@ -312,29 +310,18 @@ $(function() {
$(".remote_panel").show(); // remote $(".remote_panel").show(); // remote
$("#addModal .form input[name='executorHandler']").removeAttr("readonly"); $("#addModal .form input[name='executorHandler']").removeAttr("readonly");
// 注册模式
$("#addModal .form .executorAddress").show();
$("#addModal .form .executorAppname").hide();
}); });
// 注册模式 // Auto 注册模式
$(".ifAppName").click(function(){ $(".addressAuto").click(function(){
var ifAppName = $(this).is(':checked'); var addressAuto = $(this).is(':checked');
var $executorAddress = $(this).parents("form").find("input[name='executorAddress']"); var $executorAddress = $(this).parents("form").find("input[name='executorAddress']");
var $executorAppname = $(this).parents("form").find("input[name='executorAppname']"); if (addressAuto) {
$($executorAddress).val(""); $executorAddress.val("");
$($executorAppname).val(""); $executorAddress.attr("readonly","readonly");
var $executorAddressDiv = $(this).parents("form").find(".executorAddress");
var $executorAppnameDiv = $(this).parents("form").find(".executorAppname");
if (ifAppName) {
$($executorAddressDiv).hide();
$($executorAppnameDiv).show();
} else { } else {
$($executorAddressDiv).show(); $executorAddress.val("");
$($executorAppnameDiv).hide(); $executorAddress.removeAttr("readonly");
} }
}); });
@ -363,28 +350,27 @@ $(function() {
$("#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='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='executorAppname']").val($(this).parent('p').attr("executorAppname"));
$("#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='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='childJobKey']").val($(this).parent('p').attr("childJobKey")); $("#updateModal .form input[name='childJobKey']").val($(this).parent('p').attr("childJobKey"));
// addressAuto
var executorAddress = $(this).parent('p').attr("executorAddress");
var $addressAuto = $("#updateModal .addressAuto");
var $executorAddress = $("#updateModal .form input[name='executorAddress']");
if (executorAddress) {
$addressAuto.attr("checked", false);
$executorAddress.removeAttr("readonly");
} else {
$addressAuto.attr("checked", true);
$executorAddress.attr("readonly","readonly");
}
// jobGroupTitle // jobGroupTitle
var jobGroupTitle = $("#addModal .form select[name='jobGroup']").find("option[value='" + $(this).parent('p').attr("jobGroup") + "']").text(); var jobGroupTitle = $("#addModal .form select[name='jobGroup']").find("option[value='" + $(this).parent('p').attr("jobGroup") + "']").text();
$("#updateModal .form .jobGroupTitle").val(jobGroupTitle); $("#updateModal .form .jobGroupTitle").val(jobGroupTitle);
// appname / address, switch
var $executorAppname = $(this).parent('p').attr("executorAppname");
if ($executorAppname) {
$("#updateModal .form .ifAppName").attr("checked", true);
$("#updateModal .form .executorAppname").show();
$("#updateModal .form .executorAddress").hide();
} else {
$("#updateModal .form .ifAppName").attr("checked", false);
$("#updateModal .form .executorAppname").hide();
$("#updateModal .form .executorAddress").show();
}
// glueSwitch // glueSwitch
var glueSwitch = $(this).parent('p').attr("glueSwitch"); var glueSwitch = $(this).parent('p').attr("glueSwitch");
$("#updateModal .form input[name='glueSwitch']").val(glueSwitch); $("#updateModal .form input[name='glueSwitch']").val(glueSwitch);