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


    }
}

好了  简单的定时策略就作成了