|
@@ -1,18 +1,6 @@
|
|
|
package com.xxl.job.admin.service.impl;
|
|
|
|
|
|
-import java.util.*;
|
|
|
-
|
|
|
-import javax.annotation.Resource;
|
|
|
-
|
|
|
-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.SchedulerException;
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
-
|
|
|
import com.xxl.job.admin.core.constant.Constants.JobGroupEnum;
|
|
|
-import com.xxl.job.admin.core.jobbean.RemoteHttpJobBean;
|
|
|
import com.xxl.job.admin.core.model.ReturnT;
|
|
|
import com.xxl.job.admin.core.model.XxlJobInfo;
|
|
|
import com.xxl.job.admin.core.util.DynamicSchedulerUtil;
|
|
@@ -20,6 +8,19 @@ import com.xxl.job.admin.dao.IXxlJobInfoDao;
|
|
|
import com.xxl.job.admin.dao.IXxlJobLogDao;
|
|
|
import com.xxl.job.admin.dao.IXxlJobLogGlueDao;
|
|
|
import com.xxl.job.admin.service.IXxlJobService;
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
+import org.apache.commons.lang.time.FastDateFormat;
|
|
|
+import org.quartz.CronExpression;
|
|
|
+import org.quartz.SchedulerException;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* core job service for xxl-job
|
|
@@ -27,6 +28,7 @@ import com.xxl.job.admin.service.IXxlJobService;
|
|
|
*/
|
|
|
@Service
|
|
|
public class XxlJobServiceImpl implements IXxlJobService {
|
|
|
+ private static Logger logger = LoggerFactory.getLogger(XxlJobServiceImpl.class);
|
|
|
|
|
|
@Resource
|
|
|
private IXxlJobInfoDao xxlJobInfoDao;
|
|
@@ -36,11 +38,11 @@ public class XxlJobServiceImpl implements IXxlJobService {
|
|
|
private IXxlJobLogGlueDao xxlJobLogGlueDao;
|
|
|
|
|
|
@Override
|
|
|
- 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 executorHandler, String filterTime) {
|
|
|
+
|
|
|
// page list
|
|
|
- List<XxlJobInfo> list = xxlJobInfoDao.pageList(start, length, jobGroup, jobDesc);
|
|
|
- int list_count = xxlJobInfoDao.pageListCount(start, length, jobGroup, jobDesc);
|
|
|
+ List<XxlJobInfo> list = xxlJobInfoDao.pageList(start, length, jobGroup, executorHandler);
|
|
|
+ int list_count = xxlJobInfoDao.pageListCount(start, length, jobGroup, executorHandler);
|
|
|
|
|
|
// fill job info
|
|
|
if (list!=null && list.size()>0) {
|
|
@@ -58,9 +60,8 @@ public class XxlJobServiceImpl implements IXxlJobService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,
|
|
|
- String executorAddress, String executorParam, String author, String alarmEmail,
|
|
|
- int glueSwitch, String glueSource, String glueRemark) {
|
|
|
+ public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc, String author, String alarmEmail,
|
|
|
+ String executorAddress, String executorHandler, String executorParam, int glueSwitch, String glueSource, String glueRemark) {
|
|
|
// valid
|
|
|
if (JobGroupEnum.match(jobGroup) == null) {
|
|
|
return new ReturnT<String>(500, "请选择“任务组”");
|
|
@@ -71,15 +72,18 @@ public class XxlJobServiceImpl implements IXxlJobService {
|
|
|
if (StringUtils.isBlank(jobDesc)) {
|
|
|
return new ReturnT<String>(500, "请输入“任务描述”");
|
|
|
}
|
|
|
- if (StringUtils.isBlank(executorAddress)) {
|
|
|
- return new ReturnT<String>(500, "请输入“执行器地址”");
|
|
|
- }
|
|
|
if (StringUtils.isBlank(author)) {
|
|
|
return new ReturnT<String>(500, "请输入“负责人”");
|
|
|
}
|
|
|
if (StringUtils.isBlank(alarmEmail)) {
|
|
|
return new ReturnT<String>(500, "请输入“报警邮件”");
|
|
|
}
|
|
|
+ if (StringUtils.isBlank(executorAddress)) {
|
|
|
+ return new ReturnT<String>(500, "请输入“执行器地址”");
|
|
|
+ }
|
|
|
+ if (glueSwitch==0 && StringUtils.isBlank(executorHandler)) {
|
|
|
+ return new ReturnT<String>(500, "请输入“JobHandler”");
|
|
|
+ }
|
|
|
|
|
|
// generate jobName
|
|
|
String jobName = FastDateFormat.getInstance("yyyyMMddHHmmssSSSS").format(new Date());
|
|
@@ -100,33 +104,32 @@ public class XxlJobServiceImpl implements IXxlJobService {
|
|
|
jobInfo.setJobDesc(jobDesc);
|
|
|
jobInfo.setAuthor(author);
|
|
|
jobInfo.setAlarmEmail(alarmEmail);
|
|
|
+ jobInfo.setExecutorAddress(executorAddress);
|
|
|
+ jobInfo.setExecutorHandler(executorHandler);
|
|
|
+ jobInfo.setExecutorParam(executorParam);
|
|
|
jobInfo.setGlueSwitch(glueSwitch);
|
|
|
jobInfo.setGlueSource(glueSource);
|
|
|
jobInfo.setGlueRemark(glueRemark);
|
|
|
- jobInfo.setExecutorAddress(executorAddress);
|
|
|
- jobInfo.setExecutorParam(executorParam);
|
|
|
- xxlJobInfoDao.save(jobInfo);
|
|
|
|
|
|
try {
|
|
|
// add job 2 quartz
|
|
|
boolean result = DynamicSchedulerUtil.addJob(jobInfo);
|
|
|
if (result) {
|
|
|
+ xxlJobInfoDao.save(jobInfo);
|
|
|
return ReturnT.SUCCESS;
|
|
|
} else {
|
|
|
- xxlJobInfoDao.delete(jobGroup, jobName);
|
|
|
return new ReturnT<String>(500, "新增任务失败");
|
|
|
}
|
|
|
} catch (SchedulerException e) {
|
|
|
- e.printStackTrace();
|
|
|
+ logger.error("", e);
|
|
|
}
|
|
|
return ReturnT.FAIL;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc,
|
|
|
- String executorAddress, String executorParam,
|
|
|
- String author, String alarmEmail) {
|
|
|
-
|
|
|
+ public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc, String author, String alarmEmail,
|
|
|
+ String executorAddress, String executorHandler, String executorParam, int glueSwitch) {
|
|
|
+
|
|
|
// valid
|
|
|
if (JobGroupEnum.match(jobGroup) == null) {
|
|
|
return new ReturnT<String>(500, "请选择“任务组”");
|
|
@@ -140,33 +143,41 @@ public class XxlJobServiceImpl implements IXxlJobService {
|
|
|
if (StringUtils.isBlank(jobDesc)) {
|
|
|
return new ReturnT<String>(500, "请输入“任务描述”");
|
|
|
}
|
|
|
- if (StringUtils.isBlank(executorAddress)) {
|
|
|
- return new ReturnT<String>(500, "请输入“执行器地址”");
|
|
|
- }
|
|
|
if (StringUtils.isBlank(author)) {
|
|
|
return new ReturnT<String>(500, "请输入“负责人”");
|
|
|
}
|
|
|
if (StringUtils.isBlank(alarmEmail)) {
|
|
|
return new ReturnT<String>(500, "请输入“报警邮件”");
|
|
|
}
|
|
|
-
|
|
|
+ if (StringUtils.isBlank(executorAddress)) {
|
|
|
+ return new ReturnT<String>(500, "请输入“执行器地址”");
|
|
|
+ }
|
|
|
+ if (glueSwitch==0 && StringUtils.isBlank(executorHandler)) {
|
|
|
+ return new ReturnT<String>(500, "请输入“JobHandler”");
|
|
|
+ }
|
|
|
+
|
|
|
+ // stage job info
|
|
|
XxlJobInfo jobInfo = xxlJobInfoDao.load(jobGroup, jobName);
|
|
|
- jobInfo.setJobDesc(jobDesc);
|
|
|
jobInfo.setJobCron(jobCron);
|
|
|
+ jobInfo.setJobDesc(jobDesc);
|
|
|
jobInfo.setAuthor(author);
|
|
|
jobInfo.setAlarmEmail(alarmEmail);
|
|
|
jobInfo.setExecutorAddress(executorAddress);
|
|
|
+ jobInfo.setExecutorHandler(executorHandler);
|
|
|
jobInfo.setExecutorParam(executorParam);
|
|
|
+ jobInfo.setGlueSwitch(glueSwitch);
|
|
|
|
|
|
try {
|
|
|
// fresh quartz
|
|
|
- DynamicSchedulerUtil.rescheduleJob(jobInfo);
|
|
|
-
|
|
|
- // fresh db
|
|
|
- xxlJobInfoDao.update(jobInfo);
|
|
|
- return ReturnT.SUCCESS;
|
|
|
+ boolean ret = DynamicSchedulerUtil.rescheduleJob(jobInfo);
|
|
|
+ if (ret) {
|
|
|
+ xxlJobInfoDao.update(jobInfo);
|
|
|
+ return ReturnT.SUCCESS;
|
|
|
+ } else {
|
|
|
+ return new ReturnT<String>(500, "更新任务失败");
|
|
|
+ }
|
|
|
} catch (SchedulerException e) {
|
|
|
- e.printStackTrace();
|
|
|
+ logger.error("", e);
|
|
|
}
|
|
|
return ReturnT.FAIL;
|
|
|
}
|