parent
e58f77ddee
commit
71e12272c3
@ -0,0 +1,33 @@
|
|||||||
|
package com.xxl.job.admin.service;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.xxl.job.admin.core.model.ReturnT;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* core job service for xxl-job
|
||||||
|
*
|
||||||
|
* @author xuxueli 2016-5-28 15:30:33
|
||||||
|
*/
|
||||||
|
public interface IXxlJobService {
|
||||||
|
|
||||||
|
public Map<String, Object> pageList(int start, int length, String jobGroup, String jobName, String filterTime);
|
||||||
|
|
||||||
|
public ReturnT<String> add(String jobGroup, String jobName, String jobCron, String jobDesc,
|
||||||
|
String executorAddress, String executorHandler, String executorParam,
|
||||||
|
String author, String alarmEmail, int alarmThreshold,
|
||||||
|
int glueSwitch, String glueSource, String glueRemark);
|
||||||
|
|
||||||
|
public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc,
|
||||||
|
String handler_address, String handler_name, String handler_params,
|
||||||
|
String author, String alarmEmail, int alarmThreshold, int glueSwitch);
|
||||||
|
|
||||||
|
public ReturnT<String> remove(String jobGroup, String jobName);
|
||||||
|
|
||||||
|
public ReturnT<String> pause(String jobGroup, String jobName);
|
||||||
|
|
||||||
|
public ReturnT<String> resume(String jobGroup, String jobName);
|
||||||
|
|
||||||
|
public ReturnT<String> triggerJob(String jobGroup, String jobName);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,241 @@
|
|||||||
|
package com.xxl.job.admin.service.impl;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
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;
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* core job service for xxl-job
|
||||||
|
* @author xuxueli 2016-5-28 15:30:33
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class XxlJobServiceImpl implements IXxlJobService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IXxlJobInfoDao xxlJobInfoDao;
|
||||||
|
@Resource
|
||||||
|
public IXxlJobLogDao xxlJobLogDao;
|
||||||
|
@Resource
|
||||||
|
private IXxlJobLogGlueDao xxlJobLogGlueDao;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> pageList(int start, int length, String jobGroup, String jobName, String filterTime) {
|
||||||
|
|
||||||
|
// page list
|
||||||
|
List<XxlJobInfo> list = xxlJobInfoDao.pageList(start, length, jobGroup, jobName);
|
||||||
|
int list_count = xxlJobInfoDao.pageListCount(start, length, jobGroup, jobName);
|
||||||
|
|
||||||
|
// fill job info
|
||||||
|
if (list!=null && list.size()>0) {
|
||||||
|
for (XxlJobInfo jobInfo : list) {
|
||||||
|
DynamicSchedulerUtil.fillJobInfo(jobInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// package result
|
||||||
|
Map<String, Object> maps = new HashMap<String, Object>();
|
||||||
|
maps.put("recordsTotal", list_count); // 总记录数
|
||||||
|
maps.put("recordsFiltered", list_count); // 过滤后的总记录数
|
||||||
|
maps.put("data", list); // 分页列表
|
||||||
|
return maps;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReturnT<String> add(String jobGroup, String jobName, String jobCron, String jobDesc,
|
||||||
|
String executorAddress, String executorHandler, String executorParam,
|
||||||
|
String author, String alarmEmail, int alarmThreshold,
|
||||||
|
int glueSwitch, String glueSource, String glueRemark) {
|
||||||
|
// valid
|
||||||
|
if (JobGroupEnum.match(jobGroup) == null) {
|
||||||
|
return new ReturnT<String>(500, "请选择“任务组”");
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(jobName)) {
|
||||||
|
return new ReturnT<String>(500, "请输入“任务名”");
|
||||||
|
}
|
||||||
|
if (!CronExpression.isValidExpression(jobCron)) {
|
||||||
|
return new ReturnT<String>(500, "请输入格式正确的“corn”");
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(jobDesc)) {
|
||||||
|
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”");
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(author)) {
|
||||||
|
return new ReturnT<String>(500, "请输入“负责人”");
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(alarmEmail)) {
|
||||||
|
return new ReturnT<String>(500, "请输入“报警邮件”");
|
||||||
|
}
|
||||||
|
if (alarmThreshold < 0) {
|
||||||
|
alarmThreshold = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (DynamicSchedulerUtil.checkExists(jobName, jobGroup)) {
|
||||||
|
return new ReturnT<String>(500, "此任务已存在,请更换任务组或任务名");
|
||||||
|
}
|
||||||
|
} catch (SchedulerException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
return new ReturnT<String>(500, "此任务已存在,请更换任务组或任务名");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Backup to the database
|
||||||
|
XxlJobInfo jobInfo = new XxlJobInfo();
|
||||||
|
jobInfo.setJobGroup(jobGroup);
|
||||||
|
jobInfo.setJobName(jobName);
|
||||||
|
jobInfo.setJobCron(jobCron);
|
||||||
|
jobInfo.setJobDesc(jobDesc);
|
||||||
|
jobInfo.setJobClass(RemoteHttpJobBean.class.getName());
|
||||||
|
jobInfo.setAuthor(author);
|
||||||
|
jobInfo.setAlarmEmail(alarmEmail);
|
||||||
|
jobInfo.setAlarmThreshold(alarmThreshold);
|
||||||
|
jobInfo.setGlueSwitch(glueSwitch);
|
||||||
|
jobInfo.setGlueSource(glueSource);
|
||||||
|
jobInfo.setGlueRemark(glueRemark);
|
||||||
|
jobInfo.setExecutorAddress(executorAddress);
|
||||||
|
jobInfo.setExecutorHandler(executorHandler);
|
||||||
|
jobInfo.setExecutorParam(executorParam);
|
||||||
|
xxlJobInfoDao.save(jobInfo);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// add job 2 quartz
|
||||||
|
boolean result = DynamicSchedulerUtil.addJob(jobInfo);
|
||||||
|
if (result) {
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
} else {
|
||||||
|
xxlJobInfoDao.delete(jobGroup, jobName);
|
||||||
|
return new ReturnT<String>(500, "新增任务失败");
|
||||||
|
}
|
||||||
|
} catch (SchedulerException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return ReturnT.FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc,
|
||||||
|
String executorAddress, String executorHandler, String executorParam,
|
||||||
|
String author, String alarmEmail, int alarmThreshold, int glueSwitch) {
|
||||||
|
|
||||||
|
// valid
|
||||||
|
if (JobGroupEnum.match(jobGroup) == null) {
|
||||||
|
return new ReturnT<String>(500, "请选择“任务组”");
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(jobName)) {
|
||||||
|
return new ReturnT<String>(500, "请输入“任务名”");
|
||||||
|
}
|
||||||
|
if (!CronExpression.isValidExpression(jobCron)) {
|
||||||
|
return new ReturnT<String>(500, "请输入格式正确的“corn”");
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(jobDesc)) {
|
||||||
|
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”");
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(author)) {
|
||||||
|
return new ReturnT<String>(500, "请输入“负责人”");
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(alarmEmail)) {
|
||||||
|
return new ReturnT<String>(500, "请输入“报警邮件”");
|
||||||
|
}
|
||||||
|
if (alarmThreshold < 0) {
|
||||||
|
alarmThreshold = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
XxlJobInfo jobInfo = xxlJobInfoDao.load(jobGroup, jobName);
|
||||||
|
jobInfo.setJobCron(jobCron);
|
||||||
|
jobInfo.setJobDesc(jobDesc);
|
||||||
|
jobInfo.setAuthor(author);
|
||||||
|
jobInfo.setAlarmEmail(alarmEmail);
|
||||||
|
jobInfo.setAlarmThreshold(alarmThreshold);
|
||||||
|
jobInfo.setGlueSwitch(glueSwitch);
|
||||||
|
jobInfo.setExecutorAddress(executorAddress);
|
||||||
|
jobInfo.setExecutorHandler(executorHandler);
|
||||||
|
jobInfo.setExecutorParam(executorParam);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// fresh quartz
|
||||||
|
DynamicSchedulerUtil.rescheduleJob(jobInfo);
|
||||||
|
|
||||||
|
// fresh db
|
||||||
|
xxlJobInfoDao.update(jobInfo);
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
} catch (SchedulerException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return ReturnT.FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReturnT<String> remove(String jobGroup, String jobName) {
|
||||||
|
try {
|
||||||
|
DynamicSchedulerUtil.removeJob(jobName, jobGroup);
|
||||||
|
xxlJobInfoDao.delete(jobGroup, jobName);
|
||||||
|
xxlJobLogDao.delete(jobGroup, jobName);
|
||||||
|
xxlJobLogGlueDao.delete(jobGroup, jobName);
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
} catch (SchedulerException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return ReturnT.FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReturnT<String> pause(String jobGroup, String jobName) {
|
||||||
|
try {
|
||||||
|
DynamicSchedulerUtil.pauseJob(jobName, jobGroup); // jobStatus do not store
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
} catch (SchedulerException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return ReturnT.FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReturnT<String> resume(String jobGroup, String jobName) {
|
||||||
|
try {
|
||||||
|
DynamicSchedulerUtil.resumeJob(jobName, jobGroup);
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
} catch (SchedulerException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return ReturnT.FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReturnT<String> triggerJob(String jobGroup, String jobName) {
|
||||||
|
try {
|
||||||
|
DynamicSchedulerUtil.triggerJob(jobName, jobGroup);
|
||||||
|
return ReturnT.SUCCESS;
|
||||||
|
} catch (SchedulerException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return ReturnT.FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in new issue