spring定时任务界面化管理

该博客介绍了如何利用Quartz在Spring中实现定时任务的界面化管理,包括查看任务、执行策略以及通过界面调整任务策略的功能。文章涵盖了pom配置、Spring配置、Service层代码、实体类、工具类和控制器的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring定时任务界面化管理使用Quartz实现

功能描述:

(1)能够查看有多少定时任务,用的什么执行策略,便于管理

(2)能够通过界面操作停止或启动某个定时任务,便于管理

(3)能够通过界面操作改变某个定时任务的执行策略,便于管理

具体代码实现:

pom文件

<!-- quartz监控 -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>

spring-application.xml文件中添加:

<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" />

控制层:
/**
* @author 
* @deprecated 定时任务监控
*/
@Controller
@RequestMapping(produces = "text/plain;charset=utf-8")
public class TaskController extends BaseController{

private static Logger log = Logger.getLogger("order_log");
@Autowired
private TaskService taskService;


	/**
	* 查询所有的定时任务
	* @param request
	* @return
	*/
	@RequestMapping("/task/taskList.do")
	public ModelAndView taskList(HttpServletRequest request) {
	log.info(this.getUser().getUsername() + ",进入定时任务监控页面");
	
	List<Map<String, Object>> taskList = taskService.getAllJobs();
	ModelAndView view = new ModelAndView();
	view.setViewName("/Contents/task/taskList.jsp");
	view.addObject("taskList", taskList);
	return view;
	}
	
	/**
	* 添加一个定时任务
	* @param scheduleJob
	* @return retObj
	*/
	@RequestMapping("/task/add.do")
	@ResponseBody
	public String addTask(HttpServletRequest request , ScheduleJob scheduleJob) {
	RetObj retObj = new RetObj();
	retObj.setFlag(false);
	try {
	CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression());
	} catch (Exception e) {
	retObj.setMsg("cron表达式有误,不能被解析!");
	return JSON.toJSONString(retObj);
	}
	
	Object obj = null;
	try {
	if (StringUtils.isNotBlank(scheduleJob.getSpringId())) {
	obj = SpringUtils.getBean(scheduleJob.getSpringId());
	} else {
	Class clazz = Class.forName(scheduleJob.getBeanClass());
	obj = clazz.newInstance();
	}
	} catch (Exception e) {
	// do nothing.........
	}
	if (obj == null) {
	retObj.setMsg("未找到目标类!");
	return JSON.toJSONString(retObj);
	} else {
	Class clazz = obj.getClass();
	Method method = null;
	try {
	method = clazz.getMethod(scheduleJob.getMethodName(), null);
	} catch (Exception e) {
	// do nothing.....
	}
	if (method == null) {
	retObj.setMsg("未找到目标方法!");
	return JSON.toJSONString(retObj);
	}
	}
	
	
	try {
	taskService.addTask(scheduleJob);
	} catch (Exception e) {
	e.printStackTrace();
	retObj.setFlag(false);
	retObj.setMsg("保存失败,检查 name group 组合是否有重复!");
	return JSON.toJSONString(retObj);
	}
	
	retObj.setFlag(true);
	return JSON.toJSONString(retObj);
	}
	
	
	
	/**
	* 开启/关闭一个定时任务
	* @param request
	* @param jobId
	* @param cmd
	* @return
	*/
	@RequestMapping("/task/changeJobStatus.do")
	@ResponseBody
	public String changeJobStatus(HttpServletRequest request, Long jobId, String cmd) {
	RetObj retObj = new RetObj();
	retObj.setFlag(false);
	try {
	taskService.changeStatus(jobId, cmd);
	} catch (Exception e) {
	log.error(e.getMessage(), e);
	retObj.setMsg("任务状态改变失败!");
	return JSON.toJSONString(retObj);
	}
	retObj.setFlag(true);
	return JSON.toJSONString(retObj);
	}
	
	
	/**
	* 修改定时任务的执行时间间隔
	* @param request
	* @param jobId
	* @param cron
	* @return
	*/
	@RequestMapping("/task/updateCron.do")
	@ResponseBody
	public String updateCron(HttpServletRequest request, Long jobId, String cron) {
	RetObj retObj = new RetObj();
	retObj.setFlag(false);
	try {
	CronScheduleBuilder.cronSchedule(cron);
	} catch (Exception e) {
	retObj.setMsg("cron表达式有误,不能被解析!");
	return JSON.toJSONString(retObj);
	}
	try {
	taskService.updateCron(jobId, cron);
	} catch (SchedulerException e) {
	retObj.setMsg("cron更新失败!");
	return JSON.toJSONString(retObj);
	}
	retObj.setFlag(true);
	return JSON.toJSONString(retObj);
	}
	}
	 

service层

TaskServiceImpl
/**
* @author
*/
@Service("taskService")
@Transactional(rollbackFor=Exception.class)
public class TaskServiceImpl implements TaskService{
private static Logger log = Logger.getLogger("order_log");
@Autowired
private SchedulerFactoryBean schedulerFactoryBean;

@Autowired
private TaskDao taskDao;

/**
* 查询所有的定时任务
*/
@Override
public List<Map<String, Object>> getAllJobs() {
return taskDao.getAllJobs();
}

/**
* 添加一个定时任务
*/
@Override
public void addTask(ScheduleJob job) {
job.setCreateTime(new Date());
taskDao.addTask(job);
}


/**
* 更改任务状态
* 
* @throws SchedulerException
*/
@Override
public void changeStatus(Long jobId, String cmd) throws SchedulerException {
ScheduleJob job = getTaskById(jobId);
if (job == null) {
return;
}
if ("stop".equals(cmd)) {
deleteJob(
在上一个资源v1.0基础上的增强和改进! 1、解压。解压得到名为"schedule"的目录 2、打开界面。双击里面的schedule v1.1.html打开 3、解除限制。单击浏览器弹出框“允许阻止的内容”,可以看到效果 功能说明: 界面采用bootstrap和JEasyUI技术实现,提供三种任务运行规则:一次性、周期性、自定义 1、一次性(i:立即运行;ii:在规定的时间刻运行) 2、周期性(i:按小时;ii:按天 iii:按周; iv:按月(日);v: 按月(星期) ) 3、自定义(自定义功能,用户可以在前台随意定制执行计划,只要符合spring schedule cronExpression语法) 使用说明: 一: /* line 96 */ var action = "edit";//edit,add,view action用来指定用户动作,新增、编辑(修改)、查看 二: /* line 108 */ var cronExpression = "13 12 11 1 11 ? 2017";//when action is edit or view this value is useful cronExpression 的建意值: cronExpression=""; // action为空时 cronExpression =$("cronExpression");//当action为edit或view时, 把后面传过来的表达式值赋给cronExpression,界面会自动判断该如何展示 三: /* line 628 */ $("#sbmt").click(function() {//按钮事件....} 表单按钮提交事件相关代码自已根据实际情况替换修改。 亮点: i:日期选择功能使用JEasyUI的datetime,并在选择框上加了限制,不能选择早于当前的日期 ii:时间选择功能使用JEasyUI的spinner实现 iii: 自定义功能用户可以随意定制执行计划 iv:采用bootstrap的pills实现tab(选项卡)功能,界面友好 v: 打开修改界面界面会根据后台cronExpression值智能展示tab和radio及表单值。规则:优先顺序:一次性、周期性、自定义 vi: 提交前javascript会对cronExpression进行严格的规则验证 vii: 使用javascript正则表达式实现各定时分类的匹配展示 viii: 强兼容性,集成时能与其它css样式文件兼容,尽量把schedule.html内部样式表中的样式放在目标集成界面中样式的后面避免覆盖 另:内附schdule Spring后台核心代码供后台开发参考
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值