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


    }
}

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


posted @ 2017-03-02 10:55  LewsKay  阅读(3170)  评论(0编辑  收藏  举报