zoukankan      html  css  js  c++  java
  • Spring之调度器(Scheduler)

    调度器的使用基本步骤
    准备工作:
      1.获得一个调度器工厂:SchedulerFactory
      2.获得一个调度器:通过SchedulerFactory.getSchduler()获得
      3.往调度器里面添加一些想要写入的信息:scheduler.getContext().put("ypDao", scan_trans_task_quartz_period);

    创建任务:
      1.创建JobDetail实例,绑定Job实现类(例如QuartJob.class实现了Job的类):
      JobDetail job = JobBuilder.newJob(QuartzJob.class).withIdentity("job132121", "jgrou12412p1").build();// 定义调度触发规则

    创建触发器:
      1.创建Trigger: Trigger trigger =            TriggerBuilder.newTrigger().withIdentity("simpleTrigger2132123","triggerGr423oup").withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(5)).startNow().build();

    把作业和触发器注册到任务调度中
    scheduler.scheduleJob(job, trigger);

    启动调度
    scheduler.start();

    注意:
    1.一个调度器里面可以有多个多个被调度的任务(一个被调度的任务=触发器加任务)
    2.一个触发器可以只能触发一个任务(触发器和任务之间是一一对应的关系)。

    代码:

    实现调度功能的类():

    package com.tudy.SpringScheduler.task;
    
    import javax.annotation.PostConstruct;
    
    import org.apache.log4j.Logger;
    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;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    
    @Component
    public class ProcessQuartz {
        private static final Logger LOGGER = Logger
                .getLogger(ProcessMsgNotPushedWithQuartz.class);
    
        //该注解只能读取项目根目录下名为Application.properties(名字只能是这个)的配置文件,
        //“scan.trans.task.quartz.period:10” 中的10代表默认值
        @Value("${scan.trans.task.quartz.period:10}")
        private Integer scan_trans_task_quartz_period;
    
        @PostConstruct
        public void triggerRunner()
                throws SchedulerException, InterruptedException {
            // 通过schedulerFactory获取一个调度器
            SchedulerFactory schedulerfactory = new StdSchedulerFactory();
            Scheduler scheduler = null;
            try {
                // 通过schedulerFactory获取一个调度器
                scheduler = schedulerfactory.getScheduler();
    
                scheduler.getContext().put("ypDao", scan_trans_task_quartz_period);
              
                // 创建jobDetail实例,绑定Job实现类
                // 指明job的名称,所在组的名称,以及绑定job类
                
                JobDetail job = JobBuilder.newJob(QuartzJob.class)
                        .withIdentity("job132121", "jgrou12412p1").build();
                // 定义调度触发规则
                // 使用simpleTrigger规则
                Trigger trigger = TriggerBuilder.newTrigger()
                        .withIdentity("simpleTrigger2132123", "triggerGr423oup")
                        .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(
                                5))
                        .startNow().build();
    
                // 把作业和触发器注册到任务调度中
                scheduler.scheduleJob(job, trigger);
                
                // 启动调度
                scheduler.start();
    
            } catch (Exception e) {
                LOGGER.error(e, e);
            }
        }
    
    }

    任务类(Quartz.class)

    package com.iflytek.study.SpringScheduler.task;
    
    import org.apache.log4j.Logger;
    import org.quartz.DisallowConcurrentExecution;
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.quartz.SchedulerException;
    
    @DisallowConcurrentExecution
    public class QuartzJob implements Job {
    
        private static final Logger LOGGER = Logger.getLogger(QuartzJob.class);
    
        private final static int NOT_SEND = 0;
    
        private final static int SENT = 1;
    
        public void execute(JobExecutionContext context)
                throws JobExecutionException {
                try {
                    System.out.println("this:" + this);
                    int ypDao = (Integer) context.getScheduler().getContext().get("ypDao");
                    System.out.println("ypDao:" + ypDao);
                } catch (SchedulerException e) {
                    e.printStackTrace();
                }
    
    
        }
        
    
    }
  • 相关阅读:
    《java入门第一季》之Socket编程通信和TCP协议通信图解
    php __call 与 __callStatic
    js jquery提交表单不成功的问题原因
    js 获取对象属性的各种方法
    通达OA公共代码 php常用检测函数
    php中session的用法
    php中cookie的用法
    php session_id() session_name()
    禁用php函数的设置
    盐值加密-MD5
  • 原文地址:https://www.cnblogs.com/studyCenter/p/7535803.html
Copyright © 2011-2022 走看看