package com.xxl.job.controller; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.quartz.CronExpression; import org.quartz.Job; import org.quartz.SchedulerException; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.xxl.job.core.model.ReturnT; import com.xxl.job.core.util.DynamicSchedulerUtil; import com.xxl.job.service.job.DemoJobBean; import com.xxl.job.service.job.DemoJobBeanB; /** * index controller * @author xuxueli 2015-12-19 16:13:16 */ @Controller public class IndexController { // local job bean list public static Map<String, String> jobBeanMap = new HashMap<String, String>(); @RequestMapping("") public String index(Model model) { jobBeanMap.put(DemoJobBean.class.getName(), "测试任务"); jobBeanMap.put(DemoJobBeanB.class.getName(), "测试任务B"); model.addAttribute("jobBeanMap", jobBeanMap); // job list List<Map<String, Object>> jobList = DynamicSchedulerUtil.getJobList(); model.addAttribute("jobList", jobList); return "job/index"; } @RequestMapping("/help") public String help(Model model) { return "job/help"; } @SuppressWarnings("unchecked") @RequestMapping("/job/add") @ResponseBody public ReturnT<String> add(HttpServletRequest request) { String triggerKeyName = null; String cronExpression = null; Map<String, Object> jobData = new HashMap<String, Object>(); try { request.setCharacterEncoding("utf-8"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } Set<Map.Entry<String, String[]>> paramSet = request.getParameterMap().entrySet(); for (Entry<String, String[]> param : paramSet) { if (param.getKey().equals("triggerKeyName")) { triggerKeyName = param.getValue()[0]; } else if (param.getKey().equals("cronExpression")) { cronExpression = param.getValue()[0]; } else { jobData.put(param.getKey(), param.getValue().length>0?param.getValue()[0]:param.getValue()); } } // triggerKeyName if (StringUtils.isBlank(triggerKeyName)) { return new ReturnT<String>(500, "请输入“任务key”"); } // cronExpression if (StringUtils.isBlank(cronExpression)) { return new ReturnT<String>(500, "请输入“任务corn”"); } if (!CronExpression.isValidExpression(cronExpression)) { return new ReturnT<String>(500, "“任务corn”不合法"); } // jobData if (jobData.get(DynamicSchedulerUtil.job_desc)==null || jobData.get(DynamicSchedulerUtil.job_desc).toString().trim().length()==0) { return new ReturnT<String>(500, "请输入“任务描述”"); } // job_bean String job_bean = (String) jobData.get(DynamicSchedulerUtil.job_bean); if (StringUtils.isBlank(job_bean)) { return new ReturnT<String>(500, "JobBean不可为空"); } // jobClass Class<? extends Job> jobClass = null; try { Class<?> clazz = Class.forName(job_bean); if (clazz!=null) { jobClass = (Class<? extends Job>) clazz; } } catch (ClassNotFoundException e1) { e1.printStackTrace(); } if (jobClass == null) { return new ReturnT<String>(500, "JobBean未知"); } try { boolean result = DynamicSchedulerUtil.addJob(triggerKeyName, cronExpression, jobClass, jobData); if (!result) { return new ReturnT<String>(500, "任务ID重复,请更换确认"); } return ReturnT.SUCCESS; } catch (SchedulerException e) { e.printStackTrace(); } return ReturnT.FAIL; } @RequestMapping("/job/reschedule") @ResponseBody public ReturnT<String> reschedule(String triggerKeyName, String cronExpression) { // triggerKeyName if (StringUtils.isBlank(triggerKeyName)) { return new ReturnT<String>(500, "请输入“任务key”"); } // cronExpression if (StringUtils.isBlank(cronExpression)) { return new ReturnT<String>(500, "请输入“任务corn”"); } if (!CronExpression.isValidExpression(cronExpression)) { return new ReturnT<String>(500, "“任务corn”不合法"); } try { DynamicSchedulerUtil.rescheduleJob(triggerKeyName, cronExpression); return ReturnT.SUCCESS; } catch (SchedulerException e) { e.printStackTrace(); } return ReturnT.FAIL; } @RequestMapping("/job/remove") @ResponseBody public ReturnT<String> remove(String triggerKeyName) { try { DynamicSchedulerUtil.removeJob(triggerKeyName); return ReturnT.SUCCESS; } catch (SchedulerException e) { e.printStackTrace(); return ReturnT.FAIL; } } @RequestMapping("/job/pause") @ResponseBody public ReturnT<String> pause(String triggerKeyName) { try { DynamicSchedulerUtil.pauseJob(triggerKeyName); return ReturnT.SUCCESS; } catch (SchedulerException e) { e.printStackTrace(); return ReturnT.FAIL; } } @RequestMapping("/job/resume") @ResponseBody public ReturnT<String> resume(String triggerKeyName) { try { DynamicSchedulerUtil.resumeJob(triggerKeyName); return ReturnT.SUCCESS; } catch (SchedulerException e) { e.printStackTrace(); return ReturnT.FAIL; } } @RequestMapping("/job/trigger") @ResponseBody public ReturnT<String> triggerJob(String triggerKeyName) { try { DynamicSchedulerUtil.triggerJob(triggerKeyName); return ReturnT.SUCCESS; } catch (SchedulerException e) { e.printStackTrace(); return ReturnT.FAIL; } } }