解释:上面用的是简单触发器,也可以用Con触发器,如下
Trigger cronTrigger = TriggerBuilder.newTrigger() .withIdentity("trigger2", "triggerGroup2") .startNow() .withSchedule(cronSchedule("0 42 10 * * ?")) .build(); 4、整合spring也可以直接把上面的调度器写成配置文件,整合spring
(1)job package com.zb.quartz; import java.text.SimpleDateFormat; import java.util.Date; public class QuarFirstJob { public void first() { String strTime = new SimpleDateFormat("HH-mm-ss").format(new Date()); System.out.println( strTime + ":Hello World!"); } } (2)配置文件 <bean /> <bean> <property value="quartzGroup1" /> <property value="quartzJob1" /> <!--false表示等上一个任务执行完后再开启新的任务 --> <property value="false" /> <property> <ref bean="QuarFirstJob" /> </property> <property> <value>first</value> </property> </bean> <!-- 调度触发器 --> <bean> <property value="trigger1" /> <property value="group1" /> <property> <ref bean="jobDetail" /> </property> <property> <value>0/5 * * * * ?</value> </property> </bean> <!-- 调度工厂 --> <bean> <property> <list> <ref bean="myTrigger" /> </list> </property> </bean> 5、时间 public class QuarFirstJob { public void first() { try { TimeUnit.SECONDS.sleep(6); } catch (InterruptedException e) { e.printStackTrace(); } String strTime = new SimpleDateFormat("HH-mm-ss").format(new Date()); System.out.println( strTime + ":Hello World!"); } }上面的配置里面写是5s间隔,把上面的sleep时间分别改成4和6,发现两次任务间隔是执行时间和间隔时间的最大值,分别是5,6
总结Quartz是执行时间和间隔时间的最大值(比如;执行时间是3s,间隔是2s,则每3s执行一次;执行时间是3s,间隔是5s,则每5s执行一次。)
Spring task是执行时间+间隔时间(比如;执行时间是3s,间隔是2s,则每5s执行一次;执行时间是3s,间隔是5s,则每8s执行一次。)
timer有2中方法schedule和scheduleAtFixedRate,前者会等任务结束在开始计算时间间隔,后者是在任务开始就计算时间,有并发的情况
ScheduledExecutorService的scheduleAtFixedRate类似Quartz,scheduleWithFixedDelay类似SpringTask