Quartz入門 : 一

引入xml文件:

        <!-- quartz -->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>2.2.1</version>
        </dependency>


定時任務主體:

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        String jobName = jobExecutionContext.getJobDetail().getJobDataMap().getString("name");
        System.out.println("被調用 - 當前"+jobName+"--時間爲"+System.currentTimeMillis());
    }

啓動調度:

public class RunJob {

    public static void main(String[] args) throws SchedulerException {
        //1.創建Scheduler的工廠
        SchedulerFactory sf = new StdSchedulerFactory();

        //2.從工廠中獲取調度器實例
        Scheduler scheduler = sf.getScheduler();

        //3.創建JobDetail
        JobDetail jb = JobBuilder.newJob(JobTest1.class)
                .withDescription("this is a test job") //job的描述
                .withIdentity("testJob01", "TestJobGroup") //job 的name和group
                .build();

        //任務運行的時間,SimpleSchedle類型觸發器有效
        long time=  System.currentTimeMillis() + 3*1000L; //3秒後啓動任務
        Date statTime = new Date(time);

        //4.創建Trigger
        //定時任務屬性的大部分設置是在這
        Trigger t = TriggerBuilder.newTrigger()
                .withDescription("")
                .withIdentity("testTrigger01", "TestTriggerGroup")
                //.withSchedule(SimpleScheduleBuilder.simpleSchedule())
                .startAt(statTime)  //可設置執行時間
                //.startNow() //立即執行
                //.endAt(statTime)  //可設置停止時間
                //.withPriority(5) //設置優先級,當同一時間兩個定時任務爭奪資源時,優先級較高的將先執行,默認爲5,沒有上限,建議約定1-10
                .withSchedule(
                    SimpleScheduleBuilder.simpleSchedule()   //簡單調度表。按固定時間來
                        .repeatForever() //一直執行
                        //.withRepeatCount(10) //重複執行次數
                        .withIntervalInSeconds(1) //隔多長時間重複執行?  1秒
                        //.withIntervalInMinutes() //分鐘

                    //CalendarIntervalScheduleBuilder.calendarIntervalSchedule()  //日程調度表,可以按照日/周/月/年的方式來調度
                    //DailyTimeIntervalScheduleBuilder.dailyTimeIntervalSchedule()  //日程循環調度,可以設定每日的幾點到幾點,每隔多久,一週的那幾天不執行,執行任務,
                    //CronScheduleBuilder.cronSchedule()    //支持linux Cron語法,功能強大,比較複雜
                )
                .build();

        //5.註冊任務和定時器
        scheduler.scheduleJob(jb, t);

        //6.啓動 調度器
        scheduler.start();
        System.out.println("啓動時間="+System.currentTimeMillis());
    }

}


Quartz簡單應用就是如上:

        1.JobTest1實現Quartz提供的接口Job,並實現方法execute,成爲定時任務主體。

        2.main方法中創建調度器,並加入觸發器和任務主體,啓動觸發器,就會按照在觸發器中的配置對任務主體進行執行。

        3.任務主體的觸發規則,全部在觸發器的配置中。

        4.以上爲簡單應用,適用場景可能爲項目啓動時期規避初始化的資源爭奪高峯,設置調度器,在高峯結束後進行次優先級的初始化任務。

        5.Quartz還可以搭配JDBC進行使用,這是通常用法,還在繼續熟悉中。


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