quartz实现任务动态增加和删除
2017-03-29 15:56
190 查看
场景
分析
quartz介绍
实现案例并非解决上述场景代码
实现Job接口
任务调度
任务动态增加和删除
引用
1. 用户可以创建多个活动
2. 活动有开始时间和结束时间
3. 活动有个状态:未上线、未开始(上线但未到开始时间)、进行中(上线且处于开始时间和结束时间之间)、已结束(上线且处于活动结束时间之后)
4. 在上诉条件下自动切换活动状态,切换时间点为:活动开始时间(未开始->进行中);活动结束时间(进行中->已结束)
java解决定时任务的方法较为常用的是有两种方法:java.util.Timer 和org.quartz;这两种方式各有起优缺点,Timer实现起来非常简单,只需要实现一个TimerTask即可进行定时任务调度,但是Timer定时任务存在几个缺点导致在实际开发中很少用其作为定时器,以下是timer和quartz相比的不足:
java定时器没有持久化机制
java定时器的日程管理不够灵活
java定时器没有使用线程池
java定时器么有确切的管理方案
生成环境中更多是使用quartz来做定时任务的开发,本文主要讲解quartz如何添加定时任务和删除定时任务。
job quartz核心任务接口,实现execute方法即可
jobDetail quartz为调度器可以识别的任务详情对象,该对象包含任务的唯一key值,以及任务人发执行所需参数等
trigger 任务执行触发器,指定任务执行时间等
scheduler quartz核心调度器,将jobDetail和trigger结合起来调度定时任务
Timer和spring的Quartz两种定时器的区别[CSDN]:http://blog.csdn.net/zlxdream815/article/details/8177574
分析
quartz介绍
实现案例并非解决上述场景代码
实现Job接口
任务调度
任务动态增加和删除
引用
场景
这几天做项目的时候遇到了个状态自动切换的场景。该场景具体情况如下:1. 用户可以创建多个活动
2. 活动有开始时间和结束时间
3. 活动有个状态:未上线、未开始(上线但未到开始时间)、进行中(上线且处于开始时间和结束时间之间)、已结束(上线且处于活动结束时间之后)
4. 在上诉条件下自动切换活动状态,切换时间点为:活动开始时间(未开始->进行中);活动结束时间(进行中->已结束)
分析
根据场景中出现的情况,一个定时器就可以解决问题,只需要添加定时任务在指定时间进行活动状态切换即可。可以在活动上线的时候为每个活动创建一个定时任务,由于活动可以在进行中下线,所以在执行上线操作的时候需要判断上线后的活动状态,然后根据活动当前状态创建当时任务;在活动下线的时候关闭该活动的任务。java解决定时任务的方法较为常用的是有两种方法:java.util.Timer 和org.quartz;这两种方式各有起优缺点,Timer实现起来非常简单,只需要实现一个TimerTask即可进行定时任务调度,但是Timer定时任务存在几个缺点导致在实际开发中很少用其作为定时器,以下是timer和quartz相比的不足:
java定时器没有持久化机制
java定时器的日程管理不够灵活
java定时器没有使用线程池
java定时器么有确切的管理方案
生成环境中更多是使用quartz来做定时任务的开发,本文主要讲解quartz如何添加定时任务和删除定时任务。
quartz介绍
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。job quartz核心任务接口,实现execute方法即可
jobDetail quartz为调度器可以识别的任务详情对象,该对象包含任务的唯一key值,以及任务人发执行所需参数等
trigger 任务执行触发器,指定任务执行时间等
scheduler quartz核心调度器,将jobDetail和trigger结合起来调度定时任务
实现案例(并非解决上述场景代码)
实现Job接口
package org.hanmeis; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; /** * Created by Lethe on 2017/3/29. * 该任务将在被触发的时候将输出: hello ${name} */ public class QuartzJob implements Job { public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { JobDataMap map = jobExecutionContext.getJobDetail().getJobDataMap(); System.out.println("hello "+ map.getString("name")); } }
任务调度
package org.hanmeis; import org.quartz.JobDataMap; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.impl.JobDetailImpl; import org.quartz.impl.StdSchedulerFactory; import org.quartz.impl.triggers.CronTriggerImpl; import java.text.ParseException; /** * Created by Lethe on 2017/3/29. */ public class SchedulerTest { public static void main(String[] args) throws SchedulerException, ParseException { // 构造调度器,使用标准调度器工厂获取默认的调度器 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.start(); JobDataMap dataMap = new JobDataMap(); dataMap.put("name", "world"); // 构造JobDetail,使用默认的JobDetailImpl类 JobDetailImpl detail = new JobDetailImpl(); detail.setJobClass(QuartzJob.class); detail.setJobDataMap(dataMap); detail.setName("testJob"); // 构造Trigger,使用CronTrigger CronTriggerImpl cronTrigger = new CronTriggerImpl(); cronTrigger.setCronExpression("00 * 15 29 3 ? 2017");// 如果仅需在指定时间执行一次任务,则表达式一般写法为:00 50 15 29 3 ? 2017(表示在2017-03-29 15:50:00执行任务) cronTrigger.setName("testTrigger"); // 调度任务 scheduler.scheduleJob(detail, cronTrigger); } }
任务动态增加和删除
scheduler本身提供任务的装载、卸载及刷新等接口Date scheduleJob(JobDetail jobDetail, Trigger trigger) throws SchedulerException; Date scheduleJob(Trigger trigger) throws SchedulerException; void scheduleJobs(Map<JobDetail, Set<? extends Trigger>> triggersAndJobs, boolean replace) throws SchedulerException; void scheduleJob(JobDetail jobDetail, Set<? extends Trigger> triggersForJob, boolean replace) throws SchedulerException; boolean unscheduleJob(TriggerKey triggerKey) throws SchedulerException; boolean unscheduleJobs(List<TriggerKey> triggerKeys) throws SchedulerException; Date rescheduleJob(TriggerKey triggerKey, Trigger newTrigger) throws SchedulerException;
引用
quartz[互动百科]:http://www.baike.com/wiki/QuartzTimer和spring的Quartz两种定时器的区别[CSDN]:http://blog.csdn.net/zlxdream815/article/details/8177574
相关文章推荐
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- Spring3整合Quartz2实现定时任务及动态任务调整(添加删除暂停恢复)--推荐
- Quartz任务调度[Spring+Quartz结合]_实现任务的动态添加、修改和删除
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- 扩展:spring3整合quartz2,实现动态添加、删除定时任务
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- Quartz任务调度[Spring+Quartz结合]_实现任务的动态添加、修改和删除
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- jquery 实现表格内的tr与td,动态添加与删除. 以及序号增加与减少,大多用在Form里
- Quartz在spring下的动态任务实现
- html对select标签实现数据动态增加,删除,修改功能。