IndexController.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. package com.xxl.job.controller;
  2. import java.io.UnsupportedEncodingException;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import java.util.Map.Entry;
  7. import java.util.Set;
  8. import javax.servlet.http.HttpServletRequest;
  9. import org.apache.commons.lang.StringUtils;
  10. import org.quartz.CronExpression;
  11. import org.quartz.Job;
  12. import org.quartz.SchedulerException;
  13. import org.springframework.stereotype.Controller;
  14. import org.springframework.ui.Model;
  15. import org.springframework.web.bind.annotation.RequestMapping;
  16. import org.springframework.web.bind.annotation.ResponseBody;
  17. import com.xxl.job.core.model.ReturnT;
  18. import com.xxl.job.core.util.DynamicSchedulerUtil;
  19. import com.xxl.job.service.job.DemoJobBean;
  20. import com.xxl.job.service.job.DemoJobBeanB;
  21. /**
  22. * index controller
  23. * @author xuxueli 2015-12-19 16:13:16
  24. */
  25. @Controller
  26. public class IndexController {
  27. // local job bean list
  28. public static Map<String, String> jobBeanMap = new HashMap<String, String>();
  29. @RequestMapping("")
  30. public String index(Model model) {
  31. jobBeanMap.put(DemoJobBean.class.getName(), "测试任务");
  32. jobBeanMap.put(DemoJobBeanB.class.getName(), "测试任务B");
  33. model.addAttribute("jobBeanMap", jobBeanMap);
  34. // job list
  35. List<Map<String, Object>> jobList = DynamicSchedulerUtil.getJobList();
  36. model.addAttribute("jobList", jobList);
  37. return "job/index";
  38. }
  39. @RequestMapping("/help")
  40. public String help(Model model) {
  41. return "job/help";
  42. }
  43. @SuppressWarnings("unchecked")
  44. @RequestMapping("/job/add")
  45. @ResponseBody
  46. public ReturnT<String> add(HttpServletRequest request) {
  47. String triggerKeyName = null;
  48. String cronExpression = null;
  49. Map<String, Object> jobData = new HashMap<String, Object>();
  50. try {
  51. request.setCharacterEncoding("utf-8");
  52. } catch (UnsupportedEncodingException e1) {
  53. e1.printStackTrace();
  54. }
  55. Set<Map.Entry<String, String[]>> paramSet = request.getParameterMap().entrySet();
  56. for (Entry<String, String[]> param : paramSet) {
  57. if (param.getKey().equals("triggerKeyName")) {
  58. triggerKeyName = param.getValue()[0];
  59. } else if (param.getKey().equals("cronExpression")) {
  60. cronExpression = param.getValue()[0];
  61. } else {
  62. jobData.put(param.getKey(), param.getValue().length>0?param.getValue()[0]:param.getValue());
  63. }
  64. }
  65. // triggerKeyName
  66. if (StringUtils.isBlank(triggerKeyName)) {
  67. return new ReturnT<String>(500, "请输入“任务key”");
  68. }
  69. // cronExpression
  70. if (StringUtils.isBlank(cronExpression)) {
  71. return new ReturnT<String>(500, "请输入“任务corn”");
  72. }
  73. if (!CronExpression.isValidExpression(cronExpression)) {
  74. return new ReturnT<String>(500, "“任务corn”不合法");
  75. }
  76. // jobData
  77. if (jobData.get(DynamicSchedulerUtil.job_desc)==null || jobData.get(DynamicSchedulerUtil.job_desc).toString().trim().length()==0) {
  78. return new ReturnT<String>(500, "请输入“任务描述”");
  79. }
  80. // job_bean
  81. String job_bean = (String) jobData.get(DynamicSchedulerUtil.job_bean);
  82. if (StringUtils.isBlank(job_bean)) {
  83. return new ReturnT<String>(500, "JobBean不可为空");
  84. }
  85. // jobClass
  86. Class<? extends Job> jobClass = null;
  87. try {
  88. Class<?> clazz = Class.forName(job_bean);
  89. if (clazz!=null) {
  90. jobClass = (Class<? extends Job>) clazz;
  91. }
  92. } catch (ClassNotFoundException e1) {
  93. e1.printStackTrace();
  94. }
  95. if (jobClass == null) {
  96. return new ReturnT<String>(500, "JobBean未知");
  97. }
  98. try {
  99. boolean result = DynamicSchedulerUtil.addJob(triggerKeyName, cronExpression, jobClass, jobData);
  100. if (!result) {
  101. return new ReturnT<String>(500, "任务ID重复,请更换确认");
  102. }
  103. return ReturnT.SUCCESS;
  104. } catch (SchedulerException e) {
  105. e.printStackTrace();
  106. }
  107. return ReturnT.FAIL;
  108. }
  109. @RequestMapping("/job/reschedule")
  110. @ResponseBody
  111. public ReturnT<String> reschedule(String triggerKeyName, String cronExpression) {
  112. // triggerKeyName
  113. if (StringUtils.isBlank(triggerKeyName)) {
  114. return new ReturnT<String>(500, "请输入“任务key”");
  115. }
  116. // cronExpression
  117. if (StringUtils.isBlank(cronExpression)) {
  118. return new ReturnT<String>(500, "请输入“任务corn”");
  119. }
  120. if (!CronExpression.isValidExpression(cronExpression)) {
  121. return new ReturnT<String>(500, "“任务corn”不合法");
  122. }
  123. try {
  124. DynamicSchedulerUtil.rescheduleJob(triggerKeyName, cronExpression);
  125. return ReturnT.SUCCESS;
  126. } catch (SchedulerException e) {
  127. e.printStackTrace();
  128. }
  129. return ReturnT.FAIL;
  130. }
  131. @RequestMapping("/job/remove")
  132. @ResponseBody
  133. public ReturnT<String> remove(String triggerKeyName) {
  134. try {
  135. DynamicSchedulerUtil.removeJob(triggerKeyName);
  136. return ReturnT.SUCCESS;
  137. } catch (SchedulerException e) {
  138. e.printStackTrace();
  139. return ReturnT.FAIL;
  140. }
  141. }
  142. @RequestMapping("/job/pause")
  143. @ResponseBody
  144. public ReturnT<String> pause(String triggerKeyName) {
  145. try {
  146. DynamicSchedulerUtil.pauseJob(triggerKeyName);
  147. return ReturnT.SUCCESS;
  148. } catch (SchedulerException e) {
  149. e.printStackTrace();
  150. return ReturnT.FAIL;
  151. }
  152. }
  153. @RequestMapping("/job/resume")
  154. @ResponseBody
  155. public ReturnT<String> resume(String triggerKeyName) {
  156. try {
  157. DynamicSchedulerUtil.resumeJob(triggerKeyName);
  158. return ReturnT.SUCCESS;
  159. } catch (SchedulerException e) {
  160. e.printStackTrace();
  161. return ReturnT.FAIL;
  162. }
  163. }
  164. @RequestMapping("/job/trigger")
  165. @ResponseBody
  166. public ReturnT<String> triggerJob(String triggerKeyName) {
  167. try {
  168. DynamicSchedulerUtil.triggerJob(triggerKeyName);
  169. return ReturnT.SUCCESS;
  170. } catch (SchedulerException e) {
  171. e.printStackTrace();
  172. return ReturnT.FAIL;
  173. }
  174. }
  175. }