項目中的調度任務可使用Quartz任務調度框架 java
一、Job接口:這個接口裏面只定義了一個方法,excute框架
void execute(JobExecutionContext context)
而後定義一個類實現該接口,就能夠定義本身須要執行的任務了,JobExecutionContext類提供調度上下文的各類信息ide
二、JobDetail:用於描敘Job實現類及其餘的一些靜態信息測試
三、Trigger:描敘觸發Job執行的時間觸發規則ui
四、Scheduler:運行容器,使用SchedulerFactory建立Scheduler實例url
Hello.javaspa
1 import java.util.Date; 2 3 import org.quartz.Job; 4 import org.quartz.JobExecutionContext; 5 import org.quartz.JobExecutionException; 6 7 public class HelloJob implements Job { 8 @Override 9 public void execute(JobExecutionContext context) throws JobExecutionException { 10 System.out.println(String.format("Hello World! Time:%s", new Date())); 11 } 12 }
HelloWorldDeamo.java日誌
1 import org.quartz.JobBuilder; 2 import org.quartz.JobDetail; 3 import org.quartz.Scheduler; 4 import org.quartz.SchedulerFactory; 5 import org.quartz.SimpleScheduleBuilder; 6 import org.quartz.Trigger; 7 import org.quartz.TriggerBuilder; 8 import org.quartz.impl.StdSchedulerFactory; 9 10 public class HelloWorldDemo { 11 12 public static void main(String[] args) { 13 try { 14 // 經過schedulerFactory獲取一個調度器 15 SchedulerFactory schedulerfactory = new StdSchedulerFactory(); 16 // 經過schedulerFactory獲取一個調度器 17 Scheduler scheduler = schedulerfactory.getScheduler(); 18 // 建立jobDetail實例,綁定Job實現類 19 JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("helloJob", "jobGroup1").build(); 20 // 定義調度觸發規則,本例中使用SimpleScheduleBuilder建立了一個5s執行一次的觸發器 21 Trigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "triggerGroup1").startNow() 22 .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever()) 23 .build(); 24 // 把做業和觸發器註冊到任務調度中 25 scheduler.scheduleJob(jobDetail, trigger); 26 // 啓動調度 27 scheduler.start(); 28 // 60s後關閉 29 Thread.sleep(1000 * 30); 30 scheduler.shutdown(); 31 System.out.println("調度任務結束"); 32 } catch (Exception e) { 33 e.printStackTrace(); 34 } 35 } 36 }
1 import org.quartz.CronTrigger; 2 import org.quartz.JobDetail; 3 import org.quartz.Scheduler; 4 import org.quartz.Trigger; 5 import org.quartz.impl.StdSchedulerFactory; 6 7 /** 8 * 負責url調度 9 * 天天凌晨向url倉庫中添加入口url 10 */ 11 public class UrlManager { 12 public static void main(String[] args){ 13 try{ 14 //獲取默認調度器 15 Scheduler defaultScheduler = StdSchedulerFactory.getDefaultScheduler(); 16 //開啓調度器 17 defaultScheduler.start(); 18 //任務 19 JobDetail jobDetail = new JobDetail("url_job",Scheduler.DEFAULT_GROUP,UrlJob.class); 20 //觸發時間 凌晨一點 前三個參數是 秒 分 時 21 Trigger trigger = new CronTrigger("url_job", Scheduler.DEFAULT_GROUP,"0 0 1 * * ?"); 22 //添加調度任務和觸發時間 23 defaultScheduler.scheduleJob(jobDetail,trigger); 24 25 }catch (Exception e){ 26 e.printStackTrace(); 27 } 28 } 29 }
QuartzUtil.javacode
1 import org.quartz.Job; 2 import org.quartz.JobBuilder; 3 import org.quartz.JobDetail; 4 import org.quartz.Scheduler; 5 import org.quartz.SchedulerException; 6 import org.quartz.SchedulerFactory; 7 import org.quartz.SimpleScheduleBuilder; 8 import org.quartz.Trigger; 9 import org.quartz.TriggerBuilder; 10 import org.quartz.impl.StdSchedulerFactory; 11 import org.slf4j.Logger; 12 import org.slf4j.LoggerFactory; 13 14 /** 15 * 任務調度公共類 16 */ 17 public class QuartzUtil { 18 19 private final static String JOB_GROUP_NAME = "QUARTZ_JOBGROUP_NAME";//任務組 20 private final static String TRIGGER_GROUP_NAME = "QUARTZ_TRIGGERGROUP_NAME";//觸發器組 21 private static Logger log = LoggerFactory.getLogger(QuartzUtil.class);//日誌 22 23 /** 24 * 添加任務的方法 25 * @param jobName 任務名 26 * @param triggerName 觸發器名 27 * @param jobClass 執行任務的類 28 * @param seconds 間隔時間 29 * @throws SchedulerException 30 */ 31 public static void addJob(String jobName,String triggerName,Class<? extends Job> jobClass,int seconds) throws SchedulerException{ 32 log.info("==================initialization================="); 33 //建立一個SchedulerFactory工廠實例 34 SchedulerFactory sf = new StdSchedulerFactory(); 35 //經過SchedulerFactory構建Scheduler對象 36 Scheduler sche = sf.getScheduler(); 37 log.info("===================initialize finshed==================="); 38 39 log.info("==============add the Job to Scheduler=================="); 40 41 //用於描敘Job實現類及其餘的一些靜態信息,構建一個做業實例 42 JobDetail jobDetail = JobBuilder.newJob(jobClass) 43 .withIdentity(jobName, JOB_GROUP_NAME) 44 .build(); 45 //構建一個觸發器,規定觸發的規則 46 Trigger trigger = TriggerBuilder.newTrigger()//建立一個新的TriggerBuilder來規範一個觸發器 47 .withIdentity(triggerName, TRIGGER_GROUP_NAME)//給觸發器起一個名字和組名 48 .startNow()//當即執行 49 .withSchedule( 50 SimpleScheduleBuilder.simpleSchedule() 51 .withIntervalInSeconds(seconds)//時間間隔 單位:秒 52 .repeatForever()//一直執行 53 ) 54 .build();//產生觸發器 55 //向Scheduler中添加job任務和trigger觸發器 56 sche.scheduleJob(jobDetail, trigger); 57 //啓動 58 sche.start(); 59 } 60 61 /** 62 * 測試 63 * @param args 64 */ 65 public static void main(String[] args) { 66 try { 67 //添加第一個任務 每隔10秒執行一次 68 QuartzUtil.addJob("job1", "trigger1", TestJobOne.class, 2); 69 70 //添加第二個任務 每隔20秒執行一次 71 QuartzUtil.addJob("Job2", "trigger2", TestJobTwo.class, 5); 72 } catch (SchedulerException e) { 73 e.printStackTrace(); 74 } 75 } 76 }
TestJobOne.java orm
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; /** * 實際執行任務的業務類,須要實現Job接口 */ public class TestJobOne implements Job { /** * 執行任務的方法 */ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("================執行任務一...."); //do more...這裏能夠執行其餘須要執行的任務 } }
TestJobTwo.java
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; /** * 實際執行任務的業務類,須要實現Job接口 */ public class TestJobTwo implements Job { /** * 執行任務的方法 */ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("================執行任務二...."); //do more...這裏能夠執行其餘須要執行的任務 } }