1、去除"任务名JobName"属性,"描述"改为"名称"属性,"任务名"改为"分组"属性;
2、去除"Jobhandler"属性,新增JobKey,功能同原"JobHander属性",但是不支持修改; 3、去除"GLUE模式"复选框,改为新增的"任务模式"下拉框,且创建后不支持修改;
This commit is contained in:
parent
5b8db953d6
commit
c1cda137d5
|
@ -1,18 +1,16 @@
|
||||||
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 {
|
||||||
@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 executorHandler, String executorParam,
|
String executorAddress, String executorParam,
|
||||||
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, executorHandler, executorParam,
|
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 executorHandler, String executorParam,
|
String executorAddress, String executorParam,
|
||||||
String author, String alarmEmail, int alarmThreshold, int glueSwitch) {
|
String author, String alarmEmail, int alarmThreshold) {
|
||||||
|
|
||||||
return xxlJobService.reschedule(jobGroup, jobName, jobCron, jobDesc, executorAddress, executorHandler, executorParam, author,
|
return xxlJobService.reschedule(jobGroup, jobName, jobCron, jobDesc, executorAddress, executorParam, author,
|
||||||
alarmEmail, alarmThreshold, glueSwitch);
|
alarmEmail, alarmThreshold);
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping("/remove")
|
@RequestMapping("/remove")
|
||||||
|
|
|
@ -1,21 +1,5 @@
|
||||||
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;
|
||||||
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,10 +153,9 @@ 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())) {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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){
|
||||||
|
|
|
@ -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 executorHandler, String executorParam,
|
String executorAddress, String executorParam,
|
||||||
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);
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
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 {
|
||||||
|
|
||||||
@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 executorHandler, String executorParam,
|
String executorAddress, String executorParam,
|
||||||
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 {
|
||||||
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 {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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 {
|
||||||
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 {
|
||||||
|
|
||||||
@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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
|
|
|
@ -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 @@
|
||||||
<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 @@
|
||||||
<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 {
|
||||||
<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 {
|
||||||
<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>
|
||||||
|
|
|
@ -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() {
|
||||||
' 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() {
|
||||||
executorAddress : {
|
executorAddress : {
|
||||||
required : true
|
required : true
|
||||||
},
|
},
|
||||||
executorHandler : {
|
|
||||||
required : true
|
|
||||||
},
|
|
||||||
alarmEmail : {
|
alarmEmail : {
|
||||||
required : true
|
required : true
|
||||||
},
|
},
|
||||||
|
@ -249,9 +244,6 @@ $(function() {
|
||||||
executorAddress : {
|
executorAddress : {
|
||||||
required :"请输入“执行器地址”."
|
required :"请输入“执行器地址”."
|
||||||
},
|
},
|
||||||
executorHandler : {
|
|
||||||
required : "请输入“JobHandler”."
|
|
||||||
},
|
|
||||||
alarmEmail : {
|
alarmEmail : {
|
||||||
required : "请输入“报警邮件”."
|
required : "请输入“报警邮件”."
|
||||||
},
|
},
|
||||||
|
@ -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() {
|
||||||
executorAddress : {
|
executorAddress : {
|
||||||
required : true
|
required : true
|
||||||
},
|
},
|
||||||
executorHandler : {
|
|
||||||
required : true
|
|
||||||
},
|
|
||||||
alarmEmail : {
|
alarmEmail : {
|
||||||
required : true
|
required : true
|
||||||
},
|
},
|
||||||
|
@ -394,9 +361,6 @@ $(function() {
|
||||||
executorAddress : {
|
executorAddress : {
|
||||||
required :"请输入“执行器地址”."
|
required :"请输入“执行器地址”."
|
||||||
},
|
},
|
||||||
executorHandler : {
|
|
||||||
required : "请输入“JobHandler”."
|
|
||||||
},
|
|
||||||
alarmEmail : {
|
alarmEmail : {
|
||||||
required : "请输入“报警邮件”."
|
required : "请输入“报警邮件”."
|
||||||
},
|
},
|
||||||
|
@ -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(){
|
||||||
|
@ -438,6 +404,22 @@ $(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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// 新增-添加参数
|
// 新增-添加参数
|
||||||
|
@ -454,4 +436,5 @@ $(function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
*/
|
*/
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -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).name();
|
String jobName = serviceBean.getClass().getAnnotation(JobHander.class).value();
|
||||||
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);
|
||||||
|
|
|
@ -1,19 +1,18 @@
|
||||||
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 {
|
||||||
*/
|
*/
|
||||||
ACTION,
|
ACTION,
|
||||||
/**
|
/**
|
||||||
* remote executor jobhandler
|
* job group
|
||||||
*/
|
*/
|
||||||
EXECUTOR_HANDLER,
|
JOB_GROUP,
|
||||||
|
/**
|
||||||
|
* job name
|
||||||
|
*/
|
||||||
|
JOB_NAME,
|
||||||
/**
|
/**
|
||||||
* params of jobhandler
|
* params of jobhandler
|
||||||
*/
|
*/
|
||||||
|
@ -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 {
|
||||||
|
|
||||||
// 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 {
|
||||||
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())) {
|
||||||
|
|
|
@ -15,6 +15,6 @@ import java.lang.annotation.Target;
|
||||||
@Inherited
|
@Inherited
|
||||||
public @interface JobHander {
|
public @interface JobHander {
|
||||||
|
|
||||||
String name();
|
String value() default "";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue