zoukankan      html  css  js  c++  java
  • Quartz任务调度框架使用

    Quartz任务调度原理简析

    一、串行任务

      解释:任务在上一次调度中没有结束,让下一次的调度进行等待,但是这样会影响定时调度的间隔

      实现方法:调度类继承StatefulJob(有状态的Job)即可

    public class WelcomeJob implements StatefulJob {
    
        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException {
            System.out.println("Hello!");
        }
    
    }

    二、带参调度

      解释:在调度的时候提供不同的参数

      场景:同一业务的不同参数

      实现方法:在注册任务的时候,通过添加 JobData 将参数带到调度的类中,由JobExecutionContext对象携带,并从中获取

    传递(QuartzManager.java):

        public void addJob(ScheduleJob job) {
            try {
                // 创建jobDetail实例,绑定Job实现类
                // 指明job的名称,所在组的名称,以及绑定job类
                Class<? extends Job> jobClass = (Class<? extends Job>) (Class.forName(job.getBeanClass()).newInstance()
                        .getClass());
                JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(job.getJobName(), job.getJobGroup())// 任务名称和组构成任务key
                        .usingJobData("message","Hello") //使用JobData传递参数
                        .build();
                // 定义调度触发规则
                // 使用cornTrigger规则
                Trigger trigger = TriggerBuilder.newTrigger().withIdentity(job.getJobName(), job.getJobGroup())// 触发器key
                        .startAt(DateBuilder.futureDate(1, IntervalUnit.SECOND))
                        .withSchedule(CronScheduleBuilder.cronSchedule(job.getCronExpression())).startNow().build();
                // 把作业和触发器注册到任务调度中
                scheduler.scheduleJob(jobDetail, trigger);
                // 启动
                if (!scheduler.isShutdown()) {
                    scheduler.start();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

      可携带多种类型参数

    引用(WelcomeJob.java):

    public class WelcomeJob implements Job {
    
        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException {
            JobDataMap data = context.getJobDetail().getJobDataMap();
            String message=data.getString("message");  //message: "Hello"
        }
    
    }
  • 相关阅读:
    [记录]Python2.7使用argparse模块
    [记录]MySQL读写分离(Atlas和MySQL-proxy)
    [记录]Shell中的getopts和getopt用法
    [记录]CentOS搭建SVN服务器(主从同步)
    [记录]Zabbix3.4配置监控Oracle12c的存活状态和表空间使用率
    [记录]一则清理MySQL大表以释放磁盘空间的案例
    [原创]Oracle 12c的备份和恢复策略
    Linux awk用法
    Oracle数据库学习笔记
    oracle无法删除当前连接用户方法
  • 原文地址:https://www.cnblogs.com/superslow/p/10756195.html
Copyright © 2011-2022 走看看