任务调度 Quartz 学习(一) SimpleTrigger
概述:
在实际开发过程中,会遇到很多任务调度的需求。
比如说:某网站要在每周一上午9点更新网站数据,并发邮件通知用户;
再比如某论坛需求:每隔半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积分排名,每隔30分钟执行锁定用户解锁任务。
这时就可以使用quartz来实现了。
几个重要的类:
●Job(接口)
public interface Job { void execute(JobExecutionContext var1) throws JobExecutionException; }
●JobDetail: 真正的任务内容,任务本身是集成Job接口的,但是真正的任务是JobBuilder通过反射的方式实例化的,
●Trigger: 触发器,定义任务应当开始的时间,主要分为两类SimpleTrigger,CronTrigger;CronTrigger主要用于处理quartz表达式定义的任务,比如每个月20号,每个星期一之类的。
●Scheduler:任务调度器, 计划执行者,现在我们有了要做的内容(jobdetail),有了要做的时间(trigger),接下来,就把这两个内容填充到计划任务Scheduler对象里面,到了时间它就可以自动运行了
Example:
public class MyJob implements Job{ @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { System.out.println("测试quartz"+new Date()); } //SimpleTrigger public static void simpleTrigger(){ //获得schedulerFactory用来产生scheduler对象 SchedulerFactory sf=new StdSchedulerFactory(); Scheduler sche=null; //定义一个job,并绑定自己定义的MyJob类;利用反射实例化一个JobDetail类 JobDetail jobDetail= JobBuilder.newJob(MyJob.class).withIdentity("test_job1","group1").build(); //定义一个触发器 Trigger trigger= TriggerBuilder.newTrigger().withIdentity("trigger_1","group1") .startNow() .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(5) //重复间隔 .withRepeatCount(5)) //重复次数 .build(); try { //利用schedulerFactory产生scheduler对象 sche=sf.getScheduler(); //将jobDetail和trigger放入scheduler sche.scheduleJob(jobDetail,trigger); sche.start(); } catch (SchedulerException e) { e.printStackTrace(); } finally{ try { sche.shutdown(true); //关闭调度 } catch (SchedulerException e) { e.printStackTrace(); } } } }