zoukankan      html  css  js  c++  java
  • 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);
    
    
        }
    }

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

    
    
  • 相关阅读:
    Java基础学习02--I/O字符流
    MacOS系统Web服务器
    git学习01--git基本命令
    dokcer学习02--Docker Compose基本使用
    dokcer学习01--docker安装(MacOS)与基本命令
    JVM学习01--JVM结构与代码存储位置
    奈氏准则和香农定理
    物理层接口特性、数据通信模型、物理层基本概念(数据、信号、码元 、信源、信道、信宿 、速率、波特、带宽)
    计算机网络第一章小结
    TCP/IP参考模型(应用层、传输层、网际层、网络接口层)、五层参考模型(应用层、传输层、网络层、数据链路层、物理层)、OSI与TCP/IP参考模型比较
  • 原文地址:https://www.cnblogs.com/lewskay/p/6489433.html
Copyright © 2011-2022 走看看