一分钟掌握Java Quartz定时任务.docx
第
一分钟掌握Java?Quartz定时任务
目录前言角色介绍官方例子Quartz如何分布式?跟着官方例子看源码Trigger的处理结合起来总结
前言
前几篇介绍了单体架构的定时任务解决方式,但是现代软件架构由于业务复杂度高,业务的耦合性太强,已经由单体架构拆分成了分布式架构。因此,定时任务的架构也随之修改。而Quartz是分布式定时任务解决方案中使用简单,结构清晰,且不依赖第三方分布式调度中间件的。上车,mars酱带你车里细说~
角色介绍
Quartz入门使用的角色不多,三个角色足够,分别是:
Scheduler:调度器。用来负责任务的调度;
Job:任务。这是一个接口,业务代码继承Job接口并实现它的execute方法,是业务执行的主体部分;
Trigger:触发器。也是个接口,有两个触发器比较关键,一个是SimpleTrigger,另一个是CronTrigger。前者支持简单的定时,比如:按时、按秒等;后者直接支持cron表达式。下面我们从官方的源代码入手,看看Quartz如何做到分布式的。
官方例子
官方源代码down下来之后,有个examples文件夹:
example1是入门级中最简单的。就两个java文件,一个HelloJob:
packageorg.quartz.examples.example1;
importjava.util.Date;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.quartz.Job;
importorg.quartz.JobExecutionContext;
importorg.quartz.JobExecutionException;
*p
*ThisisjustasimplejobthatsaysHellototheworld.
*/p
*@authorBillKratzer
publicclassHelloJobimplementsJob{
privatestaticLogger_log=LoggerFactory.getLogger(HelloJob.class);
*p
*Emptyconstructorforjobinitilization
*/p
*p
*Quartzrequiresapublicemptyconstructorsothatthe
*schedulercaninstantiatetheclasswheneveritneeds.
*/p
publicHelloJob(){
*p
*Calledbythecode{@linkorg.quartz.Scheduler}/codewhena
*code{@linkorg.quartz.Trigger}/codefiresthatisassociatedwith
*thecodeJob/code.
*/p
*@throwsJobExecutionException
*ifthereisanexceptionwhileexecutingthejob.
publicvoidexecute(JobExecutionContextcontext)
throwsJobExecutionException{
//SayHellototheWorldanddisplaythedate/time
_log.info(HelloWorld!-+newDate());
}
另一个SimpleExample:
packageorg.quartz.examples.example1;
importorg.quartz.JobDetail;
importorg.quartz.Scheduler;
importorg.quartz.SchedulerFactory;
importorg.quartz.Trigger;
importorg.quartz.impl.StdSchedulerFactory;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;