zoukankan      html  css  js  c++  java
  • 浅谈JobExecutionContext & JobDataMap

    JobExecutionContext是什么?

    • 当Scheduler调用一个Job,就会将JobExecutionContext传递给Job的 execute() 方法;
    • Job能通过JobExecutionContext对象访问到Quartz运行时候的环境以及Job本身的明细数据。

    JobDataMap是什么?

    • 在进行任务调度时JobDataMap存储在JobExecutionContext中,非常方便获取
    • JobDataMap可以用来装载任何可以序列化的数据对象,当Job实例对象被执行时,这些参数对象会传递给它。
    • JobDataMap实现了JDK的Map 接口,并且添加了一些非常方便的方法用来存储基本数据类型。

    JobDataMap的获取方式

    •   方式一:从Map里面直接获取
    import java.text.NumberFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.quartz.Job;
    import org.quartz.JobDataMap;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.quartz.JobKey;
    import org.quartz.TriggerKey;
    
    public class HelloJob implements Job{
    
        public void execute(JobExecutionContext context) throws JobExecutionException {
            
            //打印当前的执行时间
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String currentTime = sdf.format(date);
            System.out.println("Current Exec Time : "+currentTime);
            //编写具体的业务逻辑        
            
            JobKey key = context.getJobDetail().getKey();
            System.out.println("my name is :"+key.getName()+" and group is:" +key.getGroup());
    TriggerKey trkey
    = context.getTrigger().getKey(); System.out.println("my name is: "+trkey.getName()+" and group is:"+trkey.getGroup());
    JobDataMap dataMap
    = context.getJobDetail().getJobDataMap(); JobDataMap tdataMap = context.getTrigger().getJobDataMap();
    String jobMessage
    = dataMap.getString("message"); Float FloatJobValue = dataMap.getFloat("FloatJobValue"); String triggerMessage = tdataMap.getString("message"); Double DoubleTriggerValue = tdataMap.getDouble("DoubleTriggerValue"
    );
    System.out.println(jobMessage); System.out.println(FloatJobValue); System.out.println(triggerMessage); System.out.println(DoubleTriggerValue); } }
    import org.quartz.JobBuilder;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SchedulerFactory;
    import org.quartz.SimpleScheduleBuilder;
    import org.quartz.Trigger;
    import org.quartz.TriggerBuilder;
    import org.quartz.impl.StdSchedulerFactory;
    
    public class HelloScheduler {
        public static void main(String[] args) throws SchedulerException {
            //创建一个JobDetail实例,将该实例与HelloJob class绑定
            JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                    .withIdentity("myJob", "group1")
                    .usingJobData("message", "hello myJob1")
                    .usingJobData("FloatJobValue", 3.14f).build();
            //创建一个Trigger实例,定义该Job立即执行,并且每隔2秒钟重复执行一次,直到永远
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity("myTrigger", "group1")
                    .usingJobData("message", "hello myTrigger1")
                    .usingJobData("DoubleTriggerValue", 2.0D)
                    .startNow().
                    withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever())
                    .build();
            //创建Scheduler实例
            SchedulerFactory sfact = new StdSchedulerFactory();
            Scheduler scheduler = sfact.getScheduler();
            scheduler.start();
            scheduler.scheduleJob(jobDetail, trigger);
        }
    
    }
    import java.text.NumberFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.quartz.Job;
    import org.quartz.JobDataMap;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.quartz.JobKey;
    import org.quartz.TriggerKey;
    
    public class HelloJob implements Job{
    
        public void execute(JobExecutionContext context) throws JobExecutionException {
            
            //打印当前的执行时间
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String currentTime = sdf.format(date);
            System.out.println("Current Exec Time : "+currentTime);
            //编写具体的业务逻辑        
            
            JobKey key = context.getJobDetail().getKey();
            System.out.println("my name is :"+key.getName()+" and group is:" +key.getGroup());
            TriggerKey trkey = context.getTrigger().getKey();
            System.out.println("my name is: "+trkey.getName()+" and group is:"+trkey.getGroup());
            
            JobDataMap dataMap = context.getMergedJobDataMap();        
            
            String jobMessage = dataMap.getString("message");
            Float FloatJobValue = dataMap.getFloat("FloatJobValue");
            String triggerMessage = dataMap.getString("message");
            Double DoubleTriggerValue = dataMap.getDouble("DoubleTriggerValue");
            
            System.out.println(jobMessage);
            System.out.println(FloatJobValue);
            System.out.println(triggerMessage);
            System.out.println(DoubleTriggerValue);
        }
    
    }

     方式二:Job实现类中添加setter方法对应JobDataMap的键值(Quartz框架默认的JobFactory 实现类在初始化job实例对象时会自动地调用这些setter方法)

    package com.test.quartz.myquartz;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import org.quartz.Job;
    import org.quartz.JobDataMap;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.quartz.JobKey;
    import org.quartz.TriggerKey;
    
    public class HelloJob implements Job{
    
         private String message;
        private Float FloatJobValue;
        private Double DoubleTriggerValue;
        
      public void setMessage(String message) {
            this.message = message;
        }
     public void setFloatJobValue(Float floatJobValue) {
            FloatJobValue = floatJobValue;
        }
    public void setDoubleTriggerValue(Double doubleTriggerValue) {
            DoubleTriggerValue = doubleTriggerValue;
        }
    
    
        public void execute(JobExecutionContext context) throws JobExecutionException {
            
            
            //打印当前的执行时间
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String currentTime = sdf.format(date);
            System.out.println("Current Exec Time : "+currentTime);
            //编写具体的业务逻辑        
            
            JobKey key = context.getJobDetail().getKey();
            System.out.println("my name is :"+key.getName()+" and group is:" +key.getGroup());
            TriggerKey trkey = context.getTrigger().getKey();
            System.out.println("my name is: "+trkey.getName()+" and group is:"+trkey.getGroup());
            
            System.out.println("message is :" +message);
            System.out.println("FloatJobValue is :" +FloatJobValue);
            System.out.println("DoubleTriggerValue is :" +DoubleTriggerValue);
        }
    
    }
  • 相关阅读:
    How to create jar for Android Library Project
    Very large tabs in eclipse panes on Ubuntu
    64bit Ubuntu, Android AAPT, R.java
    Linux(Ubuntu)下如何安装JDK
    Configure xterm Fonts and Colors for Your Eyeball
    建立、配置和使用Activity——启动其他Activity并返回结果
    建立、配置和使用Activity——使用Bundle在Activity之间交换数据
    建立、配置和使用Activity——启动、关闭Activity
    建立、配置和使用Activity——Activity
    异步任务(AsyncTask)
  • 原文地址:https://www.cnblogs.com/zhou-test/p/9720186.html
Copyright © 2011-2022 走看看