1.Quartz架構圖
1.實體層

package cn.happy.entity; //1. public class Plan { //時間 private String date; //任務 private String task; public Plan(String date, String task) { this.date = date; this.task = task; } public Plan() { } @Override public String toString() { return "Plan [date=" + date + ", task=" + task + "]"; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getTask() { return task; } public void setTask(String task) { this.task = task; } }
2.服務層

package cn.happy.service; import java.util.ArrayList; import java.util.List; //2. import cn.happy.entity.Plan; public class RemindService { //0.2用來打印集合中提醒內容的方法 public void printMessage(){ List<Plan> list=getPlasnForToday(); for(Plan plan : list){ //單個的plan System.out.println("計划的時間"+plan.getDate()+"\t計划內容:"+plan.getTask()); } } //創建一個集合,並且方法返回值是一個集合類型 public List<Plan> getPlasnForToday(){ List<Plan> list=new ArrayList<Plan>(); Plan plan1=new Plan("2016年12月17日","月底可以買回家的車票!"); Plan plan2=new Plan("2016年12月19日","webservice"); list.add(plan2); list.add(plan1); return list; } }
3.任務類的定義RemindJob implements Job

package cn.happy.quartz; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import cn.happy.service.RemindService; //讓一個普通類變成計划 public class RemindJob implements Job{ //植入service 對象 private RemindService service=new RemindService(); @Override public void execute(JobExecutionContext context)throws JobExecutionException{ service.printMessage(); } public RemindService getService() { return service; } public void setService(RemindService service) { this.service = service; } }
3.在Test類中綜合咱們的計划和觸發器
調度器≈Job+trigger

package cn.happy.test; import java.util.Date; import org.quartz.CronScheduleBuilder; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import cn.happy.quartz.RemindJob; public class MyQuertzTest { public static void tool() throws SchedulerException,InterruptedException{ //第一步構建Job JobDetail job=JobBuilder.newJob(RemindJob.class)// .withIdentity("job1","group1")// .build(); //第二步構建Trigger /*Date runTime=DateBuilder.evenMinuteDate(new Date(System.currentTimeMillis())); Trigger trigger=TriggerBuilder.newTrigger().withIdentity("trigger1","group1")// .startAt(runTime).build();//系統當前時間的下一分鍾打印一次*/ /*Trigger trigger=TriggerBuilder.newTrigger()// .withIdentity("myTrigger","myTriggerGroup")// .withSchedule(CronScheduleBuilder.cronSchedule("0 01 09 ? * 1#3 2016")).build();*/ /*//在系統時間一分鍾后打印一次 Trigger trigger=TriggerBuilder.newTrigger()// .withIdentity(TriggerKey.triggerKey("myTrigger","myTriggerGroup"))// .withSchedule(SimpleScheduleBuilder.simpleSchedule()// .withIntervalInMinutes(1) .repeatForever())// .startAt(new Date(System.currentTimeMillis()+2000))// .build();*/ /*//1.3系統當前時間開始每兩秒鍾打印一次 Trigger trigger=TriggerBuilder.newTrigger()// .withIdentity(TriggerKey.triggerKey("myTrigger","myTriggerGroup"))// .withSchedule(SimpleScheduleBuilder.simpleSchedule()// .withIntervalInSeconds(2)//2秒出現一次 .repeatForever()// )// .startAt(new Date(System.currentTimeMillis()))// .build();*/ /*Trigger trigger=TriggerBuilder.newTrigger()// .withIdentity(TriggerKey.triggerKey("myTrigger","myTriggerGroup"))// .withSchedule(SimpleScheduleBuilder.simpleSchedule()// .withIntervalInSeconds(2)//2秒出現一次 )// .startAt(new Date(System.currentTimeMillis()+2000))// .build();*/ /*Trigger trigger=TriggerBuilder.newTrigger()// .withIdentity(TriggerKey.triggerKey("myTrigger","myTriggerGroup"))// .withSchedule(SimpleScheduleBuilder.simpleSchedule()// .withIntervalInMilliseconds(2)//兩毫秒出現一次 .repeatForever())// .startAt(new Date(System.currentTimeMillis()+2000))// .build();*/ /*//隔5秒打印一次 Trigger trigger=TriggerBuilder.newTrigger()// .withIdentity("myTrigger","myTriggerGroup")// .withSchedule(SimpleScheduleBuilder.simpleSchedule()// .withIntervalInSeconds(5)// .repeatForever()) .startAt(new Date())// .build();*/ //隔5秒打印一次 Trigger trigger=TriggerBuilder.newTrigger()// .withIdentity("myTrigger","myTriggerGroup")// .withSchedule(CronScheduleBuilder.cronSchedule("0 0 10 ? * 6L"))//每月最后一個星期五10:00運行 .startAt(new Date())// .build(); /*Trigger trigger=TriggerBuilder.newTrigger()// .withIdentity(TriggerKey.triggerKey("myTrigger","myTriggerGroup"))// .withSchedule(SimpleScheduleBuilder.simpleSchedule()// .withIntervalInSeconds(2)// )// .startAt(new Date(System.currentTimeMillis()+2000))// .build();//需要放開第三步中注釋的兩行 運行完畢后服務也停止了*/ //第三步綁定 Job 和 Trigger SchedulerFactory sf=new StdSchedulerFactory(); Scheduler sched=sf.getScheduler(); sched.scheduleJob(job,trigger); sched.start(); //Thread.sleep(3000);//睡眠3秒鍾 //sched.shutdown();//停止 } public static void main(String[] args) throws SchedulerException ,InterruptedException{ tool(); System.out.println("aaaaaaaaa"); } }
總結:常用的Cron表達式