SchedulerServletContextListener定时器的使用配置

SchedulerServletContextListener的定时器配置,取自于tomcat的时间listener,于是就有了web.xml的配置

  <listener>
    <listener-class>com.aneop.common.scheduler.SchedulerServletContextListener</listener-class>
  </listener>

通过<listenner-class>可以找到指定的定时器的java类,调用ServletContextListener接口。

定时器的初始化与断开

public class SchedulerServletContextListener implements ServletContextListener {
    private static String SCHEDULER = "cron4j.scheduler";

    public void contextInitialized(ServletContextEvent event) {
        ServletContext context = event.getServletContext();
        // 1. Creates the scheduler.
        Scheduler scheduler = new Scheduler();
        // 2. Registers a custom task collector.
        TaskCollector collector = new MyTaskCollector();
        scheduler.addTaskCollector(collector);
        // 3. Starts the scheduler.
        scheduler.start();
        // 4. Registers the scheduler.
        context.setAttribute(SCHEDULER, scheduler);
    }

    public void contextDestroyed(ServletContextEvent event) {
        ServletContext context = event.getServletContext();
        // 1. Retrieves the scheduler from the context.
        Scheduler scheduler = (Scheduler) context.getAttribute(SCHEDULER);
        // 2. Removes the scheduler from the context.
        context.removeAttribute(SCHEDULER);
        // 3. Stops the scheduler.
        scheduler.stop();
    }

然后定义我们自己的任务收集器MyTaskCollector(),继承TaskCollector,并重写getTasks方法。注意SchedulingPattern 的写法,这里给一个参考cronExpression表达式资料。

public class MyTaskCollector implements TaskCollector { 

    public TaskTable getTasks() {
        SchedulingPattern pattern = new SchedulingPattern("* 0-23 * * *");
        Task task = new RedisTask();
        TaskTable ret = new TaskTable();
        ret.add(pattern, task); 

        return ret;
    }}

完成了这些,最后来写我们自己的业务RedisTask()了,这里要注意的是调度,排除在上一次调度还没有完成的时候这次调度的时间又到了这种难过情况。

public class RedisTask  extends Task {

	public void execute(TaskExecutionContext executor) throws RuntimeException {
		Scheduler scheduler = executor.getScheduler();
		TaskExecutor[] executors = scheduler.getExecutingTasks();
		if(executors!=null && executors.length>1)//调度
                …………
                …………
                …………
        }
}

 这是一种定时器比较老的写法,过两天更新一个定时器的零一中实现方法。 

时间: 2024-08-11 03:32:32

SchedulerServletContextListener定时器的使用配置的相关文章

fkdpbpSpriNgqurtz定时器源码配置

疰憨 fkdpbpSpriNgqurtz定时器源码配置

SysTick—系统定时器

本章参考资料<ARM Cortex?-M4F 技术参考手册> -4.5 章节 SysTick Timer(STK), 和4.48 章节 SHPRx,其中 STK 这个章节有 SysTick 的简介和寄存器的详细描述.因为SysTick 是属于 CM4 内核的外设,有关寄存器的定义和部分库函数都在 core_cm4.h 这个头文件中实现.所以学习 SysTick 的时候可以参考这两个资料,一个是文档,一个是源码. SysTick 简介SysTick-系统定时器是属于 CM4 内核中的一个外设,内

(四)通用定时器的定时功能(使用中断)

使用简单说明: 1.配置TIMx时钟:其中TIM1和TIM8挂在APB2总线上,TIM2-TIM7则挂在APB1总线上: 2.定时器TIMx基本配置:时基单位的配置:包括:TIM_Period(设置自动重装载寄存器,当计数值达到这个寄存器锁存数值时,溢出产生事件).TIM_Prescaler(设置预分频数,此参数决定了定时器的计数频率).TIM_CounterMode(设置计数模式).TIM_ClockDivision(设置时间分割值,特殊场合才会用到,一般不用): 3.记得使能TIMx,否则不

CC2530定时器使用

?? 定时器学习   文件夹 说明...1 协议栈函数使用...2 设置初始化定时器...2 回调函数(中断服务函数)3 启动定时器...3 停止定时器...4 寄存器操作...4 查询方式...4 中断方式(使用定时器3)7 说明 依据数据手冊可知CC2530总共同拥有4个定时器,可是定时器2被系统占用,可用的仅仅有三个,分别为定时器1/3/4 Timer在协议栈的代码位置为hal_timer.c,hal_timer.h,4个定时器的ID分别为 /* Timer ID definitions

(三)通用定时器的定时功能(不使用中断)

通用定时器使用说明: 1.配置TIMx时钟:其中TIM1和TIM8挂在APB2总线上,TIM2-TIM7则挂在APB1总线上: 2.定时器TIMx基本配置:时基单位的配置:包括:TIM_Period(设置自动重装载寄存器,当计数值达到这个寄存器锁存数值时,溢出产生事件).TIM_Prescaler(设置预分频数,此参数决定了定时器的计数频率).TIM_CounterMode(设置计数模式).TIM_ClockDivision(设置时间分割值,特殊场合才会用到,一般不用): 3.记得使能TIMx,

STM32 定时器级联

根据参考手册给出的主/ 从定时器的例子 其实就是主定时器产生一个触发信号,让从定时器去接收这个触发信号,通过这个触发信号来让从定时器工作. 下面我们来看看我设置的从定时器 只需要配置 TIMx->SMCR 的TS[2:0] (Trigger selection)   选择是哪一个触发信号来触发从定时器工作 和位 SMS[2:0](Slave mode Selection)  选择外部时钟模式1-选中(TRGI)的上升沿驱动计数器 下面是STM32规定的内部触发连接的表格,如果某个产品中没有 相应

STM32F030, 使用嘀嗒定时器Systick实现LED闪烁

本文主要解决两个问题 1 STM32的IO口要反转,怎么实现? 2 嘀嗒定时器systick的配置 解答1: 单片机的口,反转非常easy.sbit led = P1 ^6;  led = ~led;而STM32的口要让它反转.如何实现呢? 非常easy,对想要反转的IO口取异或: GPIOx->ODR ^= GPIO_Pin; 解答2: SysTick是1个24bit递减计数器 SysTick_Config(SystemFrequency / 10)   函数的形參就是systick重装定时器

spring启动quartz定时器

在很多中经常要用到定时任务,quartz是定时器中比较好用的,在Spring中使用quartz是很容易的事情,首先在spring的applicationContext.xml文件中增加如下配置: <!-- quartz定时器定义 --> <!-- 要调用的工作类,即任务处理类 --> <bean id="quartzJob" class="com.mdnet.travel.core.model.QuartzJob"></be

stm32之定时器彻底研究

分类: C/C++ 这里介绍两种方式使用stm32的定时器:直接操作寄存器和使用st的官方的库文件. 相比较而言,直接操作定时器比较简洁,对着寄存器看十分明了.而使用库文件有一点晕头转向. (个人观点) 程序如下:(以下程序在DX32的例程修改而来,使用的是比较古老的3.0固件库) 1.timer.c文件 #include "STM32Lib\\stm32f10x.h"void TIM2_Configuration(void){ TIM_TimeBaseInitTypeDef  TIM