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);
        }
    
    }
  • 相关阅读:
    [转]Spring的IOC原理[通俗解释一下]
    自我介绍
    什么是存储过程
    Linux 之 最常用的20条命令
    [转]sql语句中出现笛卡尔乘积 SQL查询入门篇
    mysql 多表连接
    正则表达式
    postman 测试API
    [转]mysql 视图
    数据库 修改统一显示时间
  • 原文地址:https://www.cnblogs.com/zhou-test/p/9720186.html
Copyright © 2011-2022 走看看