Quartz 手動更新定時任務簡單實現


最近項目中因為要連接許多硬件設備,硬件服務於我們的server服務是通過socket進行通信,本來有一個默認的定時器策略,於硬件交換數據,

現在有這么一個需求,需要人工維護  server和硬件通信的頻率 ,然后想到了 Quartz;

  由於我也是第一次接觸這個框架,邊寫邊學吧,項目是使用的maven進行管理 quartz的版本是2.2.1  因為我發現這個版本被引用的幾率是最高的  ,然后我們也用吧。

<!--定時任務用到的-->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.1</version>
        </dependency>

 

看看用到的類和接口

Schedule  統一的調度接口  多有的定時任務都是受此接口進行控制 

JobDetail  這個接口是保存定時任務的,具體的業務任務都將被此接口封裝

Job  任務工作接口  具體實現業務的類都要實現此接口  並且實現他的execute(JobExecutionContext jobExecutionContext)方法

Trigger  定時接口  封裝你的的定時策略

然后貼一下JOB的實現類

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
 * 具體任務類
 * 每個具體執行任務的類  都需要實現job接口  並 復寫執行方法
 * Created by Administrator on 2017/3/1.
 */

public class MyJob implements Job {

    //計數
    Integer num = 0;

    //被執行的任務
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        num += 1;
        System.out.println("執行第" + num + "次任務");
        //打印結果都是相同的   說明每次執行任務的job類都是通過反射生成的一個全新的對象
        //console---------------------
//        執行第1次任務
//        執行第1次任務
//        執行第1次任務
//        執行第1次任務
//        執行第1次任務
//        執行第1次任務
//        執行第1次任務
    }
}

 

然后是調用此jOB

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import java.text.ParseException;

/**
 *
 * 任務調度類
 * 1、需要先得到一個Schedule實例
 * 2、然后創建一個包含任務信息的JobDetail
 * 3、最后創建一個Trigger管理任務的執行
 * Created by Administrator on 2017/3/1.
 */
public class MyQuartzScheduling {

    public static void main(String[] args) throws SchedulerException, ParseException {
        //獲取調度類實例
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();
        //啟動
        scheduler.start();

        //初始化包含調度工作的實例
        JobDetail jobDetail= JobBuilder.newJob(MyJob.class)
                //工作名   工作組
                .withIdentity("test","group")
                .build();

        // 表達式調度構建器   讓他每兩秒執行一次
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/2 * * * * ?");

        Trigger trigger= TriggerBuilder
                .newTrigger()
                //工作名   工作組
                .withIdentity("trigger","group")
                .startNow()
                .withSchedule(scheduleBuilder)    
                .build();

        scheduler.scheduleJob(jobDetail,trigger);


    }
}

好了  簡單的定時策略就做成了

 
       


免責聲明!

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



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