通过spring的这里用到spring的 org.springframework.scheduling.quartz.SchedulerFactoryBean 可以轻松实现对quartz中定时任务的管理。(quartz的集成见:http://lfwer.iteye.com/admin/blogs/2426954)
这里直接上代码:
package com.eversec.mastersp.business.action; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.quartz.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.quartz.SchedulerFactoryBean; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("/quartz") @Api(value = "quartz定时任务管理") public class QuartzManagerAction { @Autowired private SchedulerFactoryBean schedulerFactory; /** * @param jobName 任务名 * @param jobGroupName 任务组名 * @param triggerName 触发器名 * @param triggerGroupName 触发器组名 * @param jobClass 任务 * @param cron 时间设置,参考quartz说明文档 * @Description: 添加一个定时任务 */ @SuppressWarnings({"unchecked", "rawtypes"}) @ApiOperation(value = "添加一个定时任务") @RequestMapping(value = "/addJob", method = RequestMethod.POST) @ResponseBody public Boolean addJob(@RequestParam String jobName, @RequestParam(required = false) String jobGroupName, @RequestParam String triggerName, @RequestParam(required = false) String triggerGroupName, @RequestParam Class jobClass, @RequestParam String cron) { boolean result = false; try { Scheduler sched = schedulerFactory.getScheduler(); // 任务名,任务组,任务执行类 JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName).build(); // 触发器 TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger(); // 触发器名,触发器组 triggerBuilder.withIdentity(triggerName, triggerGroupName); triggerBuilder.startNow(); // 触发器时间设定 triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron)); // 创建Trigger对象 CronTrigger trigger = (CronTrigger) triggerBuilder.build(); // 调度容器设置JobDetail和Trigger sched.scheduleJob(jobDetail, trigger); // 启动 if (!sched.isShutdown()) { sched.start(); } result = true; } catch (Exception e) { throw new RuntimeException(e); } return result; } /** * @param jobName * @param jobGroupName * @param triggerName 触发器名 * @param triggerGroupName 触发器组名 * @param cron 时间设置,参考quartz说明文档 * @Description: 修改一个任务的触发时间 */ @ApiOperation(value = "修改一个任务的触发时间") @RequestMapping(value = "/modifyJobTime", method = RequestMethod.POST) @ResponseBody public Boolean modifyJobTime(@RequestParam String jobName, @RequestParam(required = false) String jobGroupName, @RequestParam String triggerName, @RequestParam(required = false) String triggerGroupName, @RequestParam String cron) { boolean result = false; try { Scheduler sched = schedulerFactory.getScheduler(); TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName); CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey); if (trigger == null) { return result; } String oldTime = trigger.getCronExpression(); if (!oldTime.equalsIgnoreCase(cron)) { /** 方式一 :调用 rescheduleJob 开始 */ // 触发器 TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger(); // 触发器名,触发器组 triggerBuilder.withIdentity(triggerName, triggerGroupName); triggerBuilder.startNow(); // 触发器时间设定 triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron)); // 创建Trigger对象 trigger = (CronTrigger) triggerBuilder.build(); // 方式一 :修改一个任务的触发时间 sched.rescheduleJob(triggerKey, trigger); /** 方式一 :调用 rescheduleJob 结束 */ /** 方式二:先删除,然后在创建一个新的Job */ //JobDetail jobDetail = sched.getJobDetail(JobKey.jobKey(jobName, jobGroupName)); //Class<? extends Job> jobClass = jobDetail.getJobClass(); //removeJob(jobName, jobGroupName, triggerName, triggerGroupName); //addJob(jobName, jobGroupName, triggerName, triggerGroupName, jobClass, cron); /** 方式二 :先删除,然后在创建一个新的Job */ result = true; } } catch (Exception e) { throw new RuntimeException(e); } return result; } /** * @param jobName * @param jobGroupName * @param triggerName * @param triggerGroupName * @Description: 移除一个任务 */ @ApiOperation(value = "移除一个任务") @RequestMapping(value = "/removeJob", method = RequestMethod.DELETE) @ResponseBody public Boolean removeJob(@RequestParam String jobName, @RequestParam(required = false) String jobGroupName, @RequestParam String triggerName, @RequestParam(required = false) String triggerGroupName) { boolean result =false; try { Scheduler sched = schedulerFactory.getScheduler(); TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName); sched.pauseTrigger(triggerKey);// 停止触发器 sched.unscheduleJob(triggerKey);// 移除触发器 sched.deleteJob(JobKey.jobKey(jobName, jobGroupName));// 删除任务 result = true; } catch (Exception e) { throw new RuntimeException(e); } return result; } /** * @Description:启动所有定时任务 */ // @ApiOperation(value = "启动所有定时任务") // @RequestMapping(value = "/startJobs",method = RequestMethod.GET) public void startJobs() { try { Scheduler sched = schedulerFactory.getScheduler(); sched.start(); } catch (Exception e) { throw new RuntimeException(e); } } /** * @Description:关闭所有定时任务 */ // @ApiOperation(value = "关闭所有定时任务") // @RequestMapping(value = "/shutdownJobs",method = RequestMethod.GET) public void shutdownJobs() { try { Scheduler sched = schedulerFactory.getScheduler(); if (!sched.isShutdown()) { sched.shutdown(); } } catch (Exception e) { throw new RuntimeException(e); } } }
比如要删除一个job,只需要这样调用:http://localhost:8080/lfwer/quartz/removeJob?jobName=xxJob&triggerName=xxTrigger。因为我的groupName是默认的“DEFAULT”,所以不用传。
相关推荐
基于Spring的Quartz动态定时任务增删改查,代码简洁。后端采用SpringMvc+Spring+Mybatis+Quartz,前端采用Bootstrap框架,数据库采用MySQL;完成定时任务动态任务初始化,增删改查
spring和quartz的定时器的启动和停止例子
Spring Quartz 动态暂停、恢复、修改定时任务的一个demo,使用maven构建,框架采用spring springmvc jpa,数据库mysql,含数据库脚本,运行可用,页面访问地址http://localhost:8080/quartz_demo/quartz/list
可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间、频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quartz与spring的组合实现动态的改变定时任务的状态的一个...
spring mvc quartz 动态设置时间,可以实现任务调度的暂停和重启,在页面实现一个功能,可以动态设置调度的表达式,可以开启暂停任务调度
spring+quartz实现动态设置定时任务,自己的例子+心得+sql语句
Spring Quartz如何动态配置时间
本人花费多日时间,亲测有效。所需文件代码完整,只需导入常用开发IDE和mysql数据库即可正常使用。
上一次传错了资源了,这个是正确的,包含quartz动态定时任务的
本项目实现对quartz定时任务的增加、停止、恢复等功能。前端为jQuery+ bootstrap实现可视化操作,附带有mybatis分页插件应用
springtask 和 quartz +ssh简单示例springtask 和 quartz +ssh简单示例springtask 和 quartz +ssh简单示例springtask 和 quartz +ssh简单示例
Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查,部署到tomcat即可看到定时任务执行效果。本人亲测,可用!
spring+springMVC+mybatis+quartz动态定时任务
spring3整合quartz1.8和spring3整合quartz2.2两个版本示例
Springboot整合Quartz实现定时任务数据库动态配置,新增任务、修改cron表达式、暂停任务、恢复任务、删除任务等操作
spring 集成quartz定时任务 用数据库实现quartz的集群
好像很多人整合出现了问题,所以抽个demo出来 是一个demo包含源码和lib 在tomcat下可以执行
它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz 的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。虽然可以通过属性文件(在属性文件中可以指定 JDBC ...
Spring 3整合Quartz 1.8实现定时任务三:动态暂停 恢复 修改和删除任务 任务保存到数据库,系统启动时读取数据库,页面显示加载,并管理 注:spring3+quartz2动态任务调度,任务保存在内存中,页面显示动态管理版...
本项目来源与网络,本人对项目...直接通过mvn 倒入项目,在Spring-quartz-demo\src\main\webapp\sql 有sql 建立数据库,表 启动tomcat 直接访问http://localhost:8080/Spring-quartz-demo/task/taskList.htm 就可以使用