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();
            }

    }

}
时间: 2024-10-12 20:11:38

Spring之调度器(Scheduler)的相关文章

(5)调度器(scheduler)

继承关系 原理介绍 Cocos2d-x调度器为游戏提供定时事件和定时调用服务.所有Node对象都知道如何调度和取消调度事件,使用调度器有几个好处: 每当Node不再可见或已从场景中移除时,调度器会停止. Cocos2d-x暂停时,调度器也会停止.当Cocos2d-x重新开始时,调度器也会自动继续启动. Cocos2d-x封装了一个供各种不同平台使用的调度器,使用此调度器你不用关心和跟踪你所设定的定时对象的销毁和停止,以及崩溃的风险. 基础用法 游戏中我们经常会随时间的变化而做一些逻辑判断,如碰撞

Cocos2d-X3.0 刨根问底(六)----- 调度器Scheduler类源码分析

上一章,我们分析Node类的源码,在Node类里面耦合了一个 Scheduler 类的对象,这章我们就来剖析Cocos2d-x的调度器 Scheduler 类的源码,从源码中去了解它的实现与应用方法. 直入正题,我们打开CCScheduler.h文件看下里面都藏了些什么. 打开了CCScheduler.h 文件,还好,这个文件没有ccnode.h那么大有上午行,不然真的吐血了, 仅仅不到500行代码.这个文件里面一共有五个类的定义,老规矩,从加载的头文件开始阅读. #include <funct

cocos2dx调度器(scheduler)

调度器(scheduler) http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v3/scheduler/zh.md

7.k8s.调度器scheduler 亲和性、污点

#k8s. 调度器scheduler 亲和性.污点 默认调度过程:预选 Predicates (过滤节点) --> 优选 Priorities(优先级排序) --> 优先级最高节点 实际使用,根据需求控制Pod调度,需要用到如下: 指定节点.nodeAffinity(节点亲和性).podAffinity(pod 亲和性). podAntiAffinity(pod 反亲和性) #指定调度节点 # Pod.spec.nodeName 强制匹配,直接指定Node 节点,跳过 Scheduler 调度

Yarn 调度器Scheduler详解

理想情况下,我们应用对Yarn资源的请求应该立刻得到满足,但现实情况资源往往是有限的,特别是在一个很繁忙的集群,一个应用资源的请求经常需要等待一段时间才能的到相应的资源.在Yarn中,负责给应用分配资源的就是Scheduler.其实调度本身就是一个难题,很难找到一个完美的策略可以解决所有的应用场景.为此,Yarn提供了多种调度器和可配置的策略供我们选择. 一.调度器的选择 在Yarn中有三种调度器可以选择:FIFO Scheduler ,Capacity Scheduler,FairS ched

Yarn 组件的指挥部 – 调度器Scheduler

linux基础 为hadoop集群的搭建扫清了障碍,也为内存的管理,文件系统的管理扫清了障碍 接着到Hadoop的阶段,首先做集群的安装,深入到使用这两个核心的组件,分布式文件系统HDFS,解决大量数据怎么存储的问题,第二个就是分布式计算MapReduce.MapReduce的包含Yarn和MapReduce,随着集群规模的扩大,资源的管理必要用一个单独的组件Yarn来管理,程序员只要关注如何来写程序就好了. 然后讲了Zookeeper: 轻量级组件,往大数据集群里导数据的,比如Sqoop和Fl

调度器(scheduler)

调度器(schedule)为游戏提供定时事件和定时调用服务. 调度器(schedule)的功能和事件监听器(eventlistener)的功能有点类似:都是在特定情况下调用某个事先准备好的回调函数. 不同之处在于:事件监听器需要通过手动触发(Trigger)来调用这个准备好的回调函数,而调度器是需要等到游戏运行了一个时间段(delta_time)后来调用这个回调函数 一般会把调度器封装成一个类: 一.需要一个注册回调函数的接口,这个接口的参数可能包括1:time,指需要运行多久后调用注册好的回调

cocos2dx调度器scheduler

/ 让帧循环调用this->update(float dt)函数 // scheduleUpdate(); // 让帧循环去调用制定的函数,时间还是1/60秒 // schedule(schedule_selector(T19Update::MyScheduleFunc)); // 定时器,每隔2秒调用T19Update::MyScheduleFunc函数 // schedule(schedule_selector(T19Update::MyScheduleFunc), 2.0f); // 有限

[Spring笔记]支持注解的Spring调度器

概述 如果想在Spring中使用任务调度功能,除了集成调度框架Quartz这种方式,也可以使用Spring自己的调度任务框架. 使用Spring的调度框架,优点是:支持注解(@Scheduler),可以省去大量的配置. 实时触发调度任务 TaskScheduler接口 Spring3引入了TaskScheduler接口,这个接口定义了调度任务的抽象方法. TaskScheduler接口的声明: public interface TaskScheduler { ScheduledFuture<?>