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"
        }
    
    }
  • 相关阅读:
    python 初始化Logger
    常用python库
    [转]统计代码行数
    [转]Python模块学习:threading 多线程控制和处理
    [转] GIL 与 Python 线程的纠葛
    [转]Stackoverflow about Python
    清除方式日志收集
    逐行扫描的日志收集LogCollector
    [转]static和final的区别
    [转]Java中的abstract方法和abstract类的问题
  • 原文地址:https://www.cnblogs.com/superslow/p/10756195.html
Copyright © 2011-2022 走看看