zoukankan      html  css  js  c++  java
  • quartz 定时任务的总结(二)

    简单了解quartz 概念,知道它干什么之后,

    我们开始代码之前先了解这几个对象:

    1、Job

    表示一个工作,要执行的具体内容。此接口中只有一个方法
    void execute(JobExecutionContext context)
     
    2、JobDetail
    JobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略。
     
    3、Trigger代表一个调度参数的配置,什么时候去调。
     
    4、Scheduler代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。
     
     
     

    1.首先导入quartz的jar

    <!-- quartz 的jar -->
        <dependency>
          <groupId>org.quartz-scheduler</groupId>
          <artifactId>quartz</artifactId>
          <version>2.2.1</version>
        </dependency>
        <dependency>
          <groupId>org.quartz-scheduler</groupId>
          <artifactId>quartz-jobs</artifactId>
          <version>2.2.1</version>
        </dependency>

     2.创建一个Myjob  implements Job接口

    public class MyJob implements Job {
        //获取JobDataMap的两种方式:
        //1.可以通过定义属性, 来获取JobDataMap 的值,不过定义的属性名必须和JobDataMap的key值一样,创建setter getter 方法,就可以直接使用! 如果JobDetail里面的JobDataMap的key值与trigger的key值一样,只能拿到trigger的jobdatamap 的value
        //2. 通过JobExecutionContext 对象 来获取, context.getJobDetail().getJobDataMap();    context.getTrigger().getJobDataMap(); 然后通过get("key值") 就可以获得
        /*private String message;
    
        public String getMessage() {
            return message;
        }*/
    
      /*  public void setMessage(String message) {
            this.message = message;
        }*/
    
        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException {
            Date date = new Date();
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH : mm: ss");
            format.format(date);
            JobKey jobKey = context.getJobDetail().getKey();
            String name = jobKey.getName();
            String group = jobKey.getGroup();
            System.out.println("此任务的name: " + name + "组名称 :"+ group + "在"+format.format(date) + "开始运行!");
            JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
    
    
            System.out.println("获取JobDetailMap 的message 的值:" +  jobDataMap.get("message") );
        }
    }

       3编写测试类

    MyFristTest类:

      public static void main (String[] args){
            //下面的.usingJobData("message","job1使用的jobDetailmap") 就是给JobDataMap 里面添加key,value;
            //jobDetail trigger 都是bulider模式创建,通过.withIdentity("job01","group1") 方式设置 name, group,quartz的机制是一个job可以有多个trigger,但是一个trigger只能有一个job。
            
            JobDetail jobDetail = JobBuilder.newJob(MyJob.class).withIdentity("job01","group1").usingJobData("message","job1使用的jobDetailmap").build();
    
            //设定时间戳 启动3秒后开始执行,时间间隔是每两秒执行一次
          long currentTimeMillis = System.currentTimeMillis();
            SimpleDateFormat format = new SimpleDateFormat("yyyy- MM -dd HH:mm:ss");
            System.out.println("当前时间是:"+    format.format(new Date()));
            currentTimeMillis +=  3000;
    
            Date date = new Date(currentTimeMillis);
            SimpleDateFormat format1 = new SimpleDateFormat("yyyy- MM -dd HH:mm:ss");
    
            System.out.println("开始时间是:"+    format1.format(date));
           /* try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }*/
    
            Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger01","triggerGroup01").withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(2)).startAt(date).build();
            //获取Scheduler调度器,
            SchedulerFactory sf = new StdSchedulerFactory();
            try {
                Scheduler scheduler =sf.getScheduler();
                //开始调度
                scheduler.start();
                //调度jobDetail和trigger
                scheduler.scheduleJob(jobDetail,trigger);
            } catch (SchedulerException e) {
                e.printStackTrace();
            }

    4.运行结果:

  • 相关阅读:
    java实现DAG广度优先便利
    java实现图分组
    四。字符串
    二。链表
    一。数组
    TypeScript学习(六)@types包
    TypeScript学习(五)三斜线指令
    TypeScript学习(四)声明文件和declare关键字
    TypeScript学习(三)命名空间和模块
    TypeScript学习(二)函数重载
  • 原文地址:https://www.cnblogs.com/laosunlaiye/p/9396989.html
Copyright © 2011-2022 走看看