对quartz的总结
转:http://www.iteye.com/topic/117244
?
Quartz 是一个强大的企业级 Schedule 工具,也是目前最好的开源 Schedule 工具。Spring中也集成了quartz的应用,下面就讲一下如何在spring中使用quartz。
spring的配置:
xml 代码
<bean id="schedulerFactoryBean" name="code">public class TDateRange{ private int startType = 2;//开始类型。默认的使用2表示使用开始日期 private Date startDate = new Date();//开始日期 private int endType = 0;//结束类型。0表示无结束时间;1表示重复n次后结束;2表示使用结束日期 private Date endDate = new Date();//结束日期 private int occurrences;//执行次数 } public class TFrequency{ //0:无重复提醒 //1:每every //2:每个工作日detail=1,2,3,4,5 //3:每every周后的星期detail日 //4:每every月的detail日 //5:每every月的第num1个星期num2 //6:每年num1月num2日 //7:每年every月的第num1个月的星期num2 private int type = 0;//频率类型 private int every = 0; private String detail = ""; private String num1 = ""; private String num2 = ""; } private String formatQuartzString(){ String quartzStr = ""; tiggernote=""; //秒 分 时 quartzStr = "0 "+this.dateRange.getStartDate().getMinutes()+" "+this.dateRange.getStartDate().getHours()+" "; switch(this.frequency.getType()){ case 0://无重复提醒 quartzStr += this.dateRange.getStartDate().getDate()+" "+(this.dateRange.getStartDate().getMonth()+1)+" ? "+(this.dateRange.getStartDate().getYear()+1900); tiggernote+="起始时间:"+quartzStr; break; case 1://每XX天提醒 quartzStr += "*/"+this.frequency.getEvery()+" * ? "; tiggernote+="每"+this.frequency.getEvery()+"提醒"; break; case 2://每个工作日detail=1,2,3,4,5 //quartzStr += "? * 2-6"; quartzStr ="0 */1 * * * ?"; //测试 tiggernote+="每个工作日1,2,3,4,5提醒"; break; case 3://每every周后的星期detail日 quartzStr += "? * "+this.frequency.getDetail()+"/"+this.frequency.getEvery(); tiggernote+="每"+this.frequency.getEvery()+"周星期"+this.frequency.getDetail()+"日"; break; case 4://每every个月的detail日 quartzStr += this.frequency.getDetail()+" */"+this.frequency.getEvery()+" ?"; tiggernote+="每"+this.frequency.getEvery()+"月"+this.frequency.getDetail()+"日"; break; case 5://每every个月的第num1个星期num2 quartzStr += "? */"+this.frequency.getEvery()+" "+this.frequency.getNum2(); //星期 if(Integer.valueOf(this.frequency.getNum1()).intValue()>0){ quartzStr += "#"+this.frequency.getNum1(); tiggernote+="每"+this.frequency.getEvery()+"月第"+this.frequency.getNum1()+"个星期"+this.frequency.getNum2()+"日"; }else{ quartzStr += "L"; tiggernote+="每"+this.frequency.getEvery()+"月星期"+this.frequency.getNum2(); } break; case 6://每年num1月num2日 quartzStr += this.frequency.getNum2()+" "+this.frequency.getNum1()+" ?"; tiggernote+="每年"+this.frequency.getNum1()+"月"+this.frequency.getNum2()+"日"; break; case 7://每年every月的第num1个星期num2 quartzStr += "? "+this.getFrequency().getEvery()+" "+this.getFrequency().getNum2(); //星期 if(Integer.valueOf(this.frequency.getNum1()).intValue()>0){ quartzStr += "#"+this.frequency.getNum1(); tiggernote+="每年"+this.getFrequency().getEvery()+"月的第"+this.frequency.getNum1()+"个星期"+this.getFrequency().getNum2()+"日"; }else{ quartzStr += "L"; tiggernote+="每年"+this.getFrequency().getEvery()+"月的"+this.getFrequency().getNum2()+"日"; } break; default : } log.debug("quartzStr="+quartzStr); return quartzStr; }
?
Scheduler:
Scheduler 是一个计划集,其中可以包含多个 JobDetail 和 Trigger 组成的计划任务。
在Quartz中,我们可以通过
SchedulerFactory scheduleFactory = new StdSchedulerFactory();
Scheduler scheduler = scheduleFactory.getScheduler();
来取得scheduler,通过调用scheduler.start()来启动quartz。
在spring中,org.springframework.scheduling.quartz.SchedulerFactoryBean是对Quartz的org.quartz.Scheduler的封装,通过上面的配置,在spring启动的时候,quartz就会跟随着启动,不需要再用scheduler.start()来启动。在spring中,如果要取得scheduler,可通过上面的配置文件那样,将SchedulerFactoryBean注入到schdeuler中。
?
?
------------------------------------------另一文章--------------------------
?
org.quartz.Scheduler 来控制任务
scheduler.start();???? //开始任务
scheduler.shutdown();? //终止任务
你在SchedulerFactoryBean里面不配置触发器
然后在你要触发的事件里配置一个scheduler不就可以了吗
Scheduler sch = (Scheduler) context.getBean("...");
sch.scheduleJob(newJob..., newTrigger...);