初識Quartz(入門案例)+常用的Cron表達式


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;
    }
    
    

}
Plan實體類

 

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;
    }

}
RemindService

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;
        }
}
RemindJob

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表達式

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM