Quartz之小结

*、凡涉及到机器代替人以某种周期去完成的事情时,总会用到定时执行这样的需求,此时Quartz是不错的选择,那么怎么使用呢?请继续向下看,O(∩_∩)O哈哈~

华丽的分隔

*、首先要知道工厂如何用!

StdSchedulerFactory sdf = new StdSchedulerFactory();
注意:项目里即使在不同的地方new了N个工厂,如果在下面的操作中不认真对待,会有大问题的哦!

*、工厂有了,那么该如何正确生产调度器这个产品呢?

Properties props = new Properties();  
props.put("org.quartz.scheduler.instanceName", "QuartzConfig"+new Date().toString());  
props.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");  
props.put("org.quartz.threadPool.threadCount", "1");  
sdf.initialize(props); 
sd.scheduleJob(1,2);
其中,最关键的就是instanceName,也就是调度器的名称,名称不同,从工厂中获取的调度器也就不同,那么调度器之间的执行任务的周期呀,开启和关闭,也就不会被互相影响了,至于调度器之间的性能问题,还未深入,哈哈

*、调度器如何安排和设置任务呢?

JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, class);// 任务名,任务组,任务执行类  
其中class是一个类的CLASS
若提供的是字符串类型的完整(包括包的路径)类名,可通过反射获取CLASS
CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 触发器名,触发器组  
trigger.setCronExpression(time);// 触发器时间设定  
sched.scheduleJob(jobDetail, trigger); 
其中注意同一调度器的jobname不能出现相同的。
关于动态修改执行周期等参数,可以通过先移除当前任务,然后再添加的方式进行任务的更新。

*、如果我只想修改执行周期这个参数呢?

这个当然也是可以的啦!!!
CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerName,triggerGroupName);  
 if (trigger == null) { //根据触发器名称获取要修改的触发器
    return;  
 }  
String oldTime = trigger.getCronExpression();  
 if (!oldTime.equalsIgnoreCase(time)) {//判断执行时间是否一致
        CronTrigger ct = (CronTrigger) trigger;  
       // 重新修改触发器的执行时间  
       ct.setCronExpression(time);  
       // 通过调度器重启触发器  
        sched.resumeTrigger(triggerName, triggerGroupName);  
}

*、嗯,还可能就是想只关闭其中一个任务!

也简单,按照如下流程即可
sched.pauseTrigger(触发器名称, TRIGGER_GROUP_NAME);// 停止触发器  
sched.unscheduleJob(触发器名称, TRIGGER_GROUP_NAME);// 移除触发器  
sched.deleteJob(任务名称, JOB_GROUP_NAME);// 删除任务  

*、当前调度器的关闭和暂停

关闭是:shutdown
暂停是:standby
我喜欢暴力一点,哈哈,每次都是shutdown,然后重新添加任务再开启,因为standby好像会将暂停中的任务给补回来执行,这是我不想看到的现象!!!

猜你喜欢

转载自lbovinl.iteye.com/blog/2412627
今日推荐