quartz API 學習demo

api調用demo1

package cn.xiniu.quartz;

import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;

/**
 * @ClassName: Demo1
 * @Description 請描述下該類是做什麼的
 * @Author feizhou
 * @Date 2020/6/7 0007  下午 12:35
 * @Verson 1.0
 **/
public class Demo1 {

        public static void main(String[] args) {
            try {
                // 獲取scheduler實例對象
                Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

                // 開始
                scheduler.start();
                // 結束
                scheduler.shutdown();

            } catch (SchedulerException se) {
                se.printStackTrace();
            }
    }
}

api調用demo2

/**
 * @ClassName: Demo1
 * @Description 請描述下該類是做什麼的
 * @Author feizhou
 * @Date 2020/6/7 0007  下午 12:35
 * @Verson 1.0
 **/
public class Demo2 {
    //scheduler實例化後,可以啓動(start)、暫停(stand-by)、停止(shutdown)。
    //注意:
        //scheduler被停止後,除非重新實例化,否則不能重新啓動;
        //只有當scheduler啓動後,trigger纔會被觸發(job纔會被執行)。//處於暫停狀態不會被觸發
        public static void main(String[] args) throws SchedulerException {

            //獲取工廠
            SchedulerFactory schedFact = new StdSchedulerFactory();
            //獲取Scheduler實例
            Scheduler sched = schedFact.getScheduler();

            //開始
            sched.start();

            // 定義job
            JobDetail job1 = newJob(HelloJob.class)
                    .withIdentity("myJob", "group1")
                    .build();

            // 定義觸發器
            Trigger job1Trigger = newTrigger()
                    .withIdentity("myTrigger", "group1")
                    .startNow()
                    .withSchedule(simpleSchedule()
                            //間隔時間
                            .withIntervalInSeconds(1)
                            .repeatForever())
                    .build();

            //執行job,使用的trigger觸發器
            sched.scheduleJob(job1, job1Trigger);
    }
}


---------------
/**
 * @ClassName: HelloJob
 * @Description 請描述下該類是做什麼的
 * @Author feizhou
 * @Date 2020/6/7 0007  下午 12:56
 * @Verson 1.0
 **/
public class HelloJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("時間:"+new Date().getSeconds() +"--->HelloJob");
    }
}

-----------

輸出:
時間:50--->HelloJob
時間:51--->HelloJob
時間:52--->HelloJob
時間:53--->HelloJob
時間:54--->HelloJob
時間:55--->HelloJob

 

JobDataMap:job實例增加屬性或配置

package cn.xiniu.quartz;


import cn.xiniu.quartz.jobs.HelloJob;
import cn.xiniu.quartz.jobs.HelloJob2;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;

/**
 * @ClassName: Demo1
 * @Description 請描述下該類是做什麼的
 * @Author feizhou
 * @Date 2020/6/7 0007  下午 12:35
 * @Verson 1.0
 **/
public class Demo3 {
    //scheduler實例化後,可以啓動(start)、暫停(stand-by)、停止(shutdown)。
    //注意:
        //scheduler被停止後,除非重新實例化,否則不能重新啓動;
        //只有當scheduler啓動後,trigger纔會被觸發(job纔會被執行)。//處於暫停狀態不會被觸發
        public static void main(String[] args) throws SchedulerException {

            //獲取工廠
            SchedulerFactory schedFact = new StdSchedulerFactory();
            //獲取Scheduler實例
            Scheduler sched = schedFact.getScheduler();

            //開始
            sched.start();

            // 定義job
            JobDetail job1 = newJob(HelloJob2.class)
                    .withIdentity("myJob", "group1")
                    //JobDataMap:job實例增加屬性或配置
                    .usingJobData("key1", "你好")
                    .usingJobData("key2", "我好")
                    .build();

            // 定義觸發器
            Trigger job1Trigger = newTrigger()
                    .withIdentity("myTrigger", "group1")
                    .startNow()
                    .withSchedule(simpleSchedule()
                            //間隔時間
                            .withIntervalInSeconds(1)
                            .repeatForever())
                    .build();

            //執行job,使用的trigger觸發器
            sched.scheduleJob(job1, job1Trigger);
    }
}


-------------

package cn.xiniu.quartz.jobs;

import org.quartz.*;

import java.util.Date;

/**
 * @ClassName: HelloJob
 * @Description 請描述下該類是做什麼的
 * @Author feizhou
 * @Date 2020/6/7 0007  下午 12:56
 * @Verson 1.0
 **/
public class HelloJob2 implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        JobKey key = context.getJobDetail().getKey();

        JobDataMap dataMap = context.getJobDetail().getJobDataMap();

        String v1 = dataMap.getString("key1");
        String v2 = dataMap.getString("key2");

        System.err.println("key--> " + key );
        System.err.println("key1--> " + v1 );
        System.err.println("key2--> " + v2 );
        System.out.println("時間:"+new Date().getSeconds() +"--->HelloJob");
    }
}

-------------
輸出
 
 
key--> group1.myJob
key1--> 你好
key2--> 我好
時間:12--->HelloJob
key--> group1.myJob
key1--> 你好
key2--> 我好
時間:13--->HelloJob
key--> group1.myJob
key1--> 你好
key2--> 我好
時間:14--->HelloJob
key--> group1.myJob
key1--> 你好
key2--> 我好

Process finished with exit code -1

 

 

Simple Trigger

package cn.xiniu.quartz;


import cn.xiniu.quartz.jobs.HelloJob2;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import java.util.Date;

import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;

/**
 * @ClassName: Demo1
 * @Description 請描述下該類是做什麼的
 * @Author feizhou
 * @Date 2020/6/7 0007  下午 12:35
 * @Verson 1.0
 **/
public class Demo4 {
    //scheduler實例化後,可以啓動(start)、暫停(stand-by)、停止(shutdown)。
    //注意:
        //scheduler被停止後,除非重新實例化,否則不能重新啓動;
        //只有當scheduler啓動後,trigger纔會被觸發(job纔會被執行)。//處於暫停狀態不會被觸發
        public static void main(String[] args) throws SchedulerException {

            //獲取工廠
            SchedulerFactory schedFact = new StdSchedulerFactory();
            //獲取Scheduler實例
            Scheduler sched = schedFact.getScheduler();

            //開始
            sched.start();

            // 定義job
            JobDetail job1 = newJob(HelloJob2.class)
                    .withIdentity("myJob", "group1")
                    //JobDataMap:job實例增加屬性或配置
                    .usingJobData("key1", "你好")
                    .usingJobData("key2", "我好")
                    .build();



            // 定義觸發器
            Trigger job1Trigger = newTrigger()
                    .withIdentity("myTrigger", "group1")
                    //15秒後執行
                    .startAt(DateBuilder.futureDate(15, DateBuilder.IntervalUnit.SECOND))
                    //開始20秒後結束
                    .endAt(DateBuilder.futureDate(25, DateBuilder.IntervalUnit.SECOND))
                    .withSchedule(simpleSchedule()
                            //間隔1秒
                            .withIntervalInSeconds(1)
                            //重複無窮次數
                            //.repeatForever()
                            //重複10次
                            .withRepeatCount(10))

                    .build();

            //執行job,使用的trigger觸發器
            sched.scheduleJob(job1, job1Trigger);
    }
}

 

CronTrigger 

package cn.xiniu.quartz;


import cn.xiniu.quartz.jobs.HelloJob2;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;

/**
 * @ClassName: Demo1
 * @Description 請描述下該類是做什麼的
 * @Author feizhou
 * @Date 2020/6/7 0007  下午 12:35
 * @Verson 1.0
 **/
public class Demo5 {
    //scheduler實例化後,可以啓動(start)、暫停(stand-by)、停止(shutdown)。
    //注意:
        //scheduler被停止後,除非重新實例化,否則不能重新啓動;
        //只有當scheduler啓動後,trigger纔會被觸發(job纔會被執行)。//處於暫停狀態不會被觸發
        public static void main(String[] args) throws SchedulerException {

            //獲取工廠
            SchedulerFactory schedFact = new StdSchedulerFactory();
            //獲取Scheduler實例
            Scheduler sched = schedFact.getScheduler();

            //開始
            sched.start();

            // 定義job
            JobDetail job1 = newJob(HelloJob2.class)
                    .withIdentity("myJob", "group1")
                    //JobDataMap:job實例增加屬性或配置
                    .usingJobData("key1", "你好")
                    .usingJobData("key2", "我好")
                    .build();



            // 定義觸發器
            Trigger job1Trigger = newTrigger()
                    .withIdentity("myTrigger", "group1")
                    .withSchedule(cronSchedule("0/2 59 15 * * ?"))
                    .build();

            //執行job,使用的trigger觸發器
            sched.scheduleJob(job1, job1Trigger);
    }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章