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

最近項目中由於要鏈接許多硬件設備,硬件服務於咱們的server服務是經過socket進行通訊,原本有一個默認的定時器策略,於硬件交換數據,java

如今有這麼一個需求,須要人工維護  server和硬件通訊的頻率 ,而後想到了 Quartz;框架

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

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

 

看看用到的類和接口maven

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

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

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

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

而後貼一下JOB的實現類server

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;

/**
 *
 * 任務調度類
 * 一、須要先獲得一個Schedule實例
 * 二、而後建立一個包含任務信息的JobDetail
 * 三、最後建立一個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);


    }
}

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

相關文章
相關標籤/搜索