• Quartz(2):JobDetail、JobExectionContext、JobDataMap的介绍


    一.

    JobDetail可以为Job实例设置属性、jobDataMap属性等

    JobExectionContext:Job的execute方法的参数,它记录了job的信息和Quartz相关的运行环境

    JobDataMap:(1)进行任务调度室,JobDataMap存储在JobExectionContext中

          (2)JobDataMap实现了java.util.Map接口

          (3)Job实现类中添加setter方法对应的JobDataMap的键值,JobFactory实现类在初始化job实例对象时会自动调用这些setter方法

    二.

    Job类

    /**
     * 需要实现Job接口
     */
    public class HelloJob implements Job {
    
        //Job实现类中添加setter方法对应的JobDataMap的键值,JobFactory实现类在初始化job实例对象时会自动调用这些setter方法
        private Integer account;
        private String name;
    
        public void setAccount(Integer account) {
            this.account = account;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
            DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            LocalDateTime time = LocalDateTime.now();
            String localTime = df.format(time);
            System.out.println("数据库备份时间:"+localTime);
    
            JobKey key = jobExecutionContext.getJobDetail().getKey();
    
            //通过JobExecutionContext类,我们可以在任务执行时获取Job本身的一些信息
            System.out.println("任务:"+key.getGroup()+":"+key.getName());  //获取任务组和任务名称
            System.out.println(jobExecutionContext.getJobDetail().getJobClass()); //获取Job的Class
    
            //获取任务数据的参数值
            JobDataMap dataMap = jobExecutionContext.getJobDetail().getJobDataMap();
            dataMap.forEach((x,y)-> System.out.println(x+":"+y));
    
            //Trigger和JobDetail类似,也可以传递dataMap(TriggerDataMap)
            //但是,如果遇到同名的key,trigger中的usingJobData会覆盖JobDetail中的usingJobData
            TriggerKey triggerKey = jobExecutionContext.getTrigger().getKey();
            System.out.println("触发器:"+triggerKey.getGroup()+":"+triggerKey.getName());
    
            //当前任务的执行时间
            System.out.println("当前任务执行时间:"+jobExecutionContext.getFireTime());
    
            //当前类的成员变量值
            System.out.println("成员变量:"+account+":"+name);
        }
    }
    

      main方法:

    public static void main(String[] args) throws SchedulerException {
            //调度器(Scheduler)
            //从工厂中获取
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
    
            //任务数据
            JobDataMap map = new JobDataMap();
            map.put("account",123456);
            map.put("name","张三");
    
            //任务实例(JobDetail)
            JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                    .withIdentity("job1", "group1")  //参数一:任务名称 参数二:任务组
                    .usingJobData(map)  //传递JobDataMap
                    .build();
    
            //触发器(Trigger)
            SimpleTrigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity("trigger1", "group1")
                    .startNow()//立即启用
                    .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(5))  //每5秒执行一次
                    .build();
            //关联触发器和任务  按照触发器的条件执行任务
            scheduler.scheduleJob(jobDetail,trigger);
            //启动
            scheduler.start();
        }
    

      运行结果:

  • 相关阅读:
    loj#6433. 「PKUSC2018」最大前缀和(状压dp)
    PKUWC2019游记
    10. Regular Expression Matching
    9. Palindrome Number
    8. String to Integer (atoi)
    7. Reverse Integer
    6. ZigZag Conversion
    5. Longest Palindromic Substring
    4. Median of Two Sorted Arrays
    3. Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/12624075.html
Copyright © 2020-2023  润新知