`
weitao1026
  • 浏览: 1048220 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

定时器

阅读更多
Spring中Quartz的配置



Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在Spring中怎样配置Quartz:
首先我们来写一个被调度的类:
package com.kay.quartz;
public class QuartzJob
{

     public void work()
     {
     System.out.println("Quartz的任务调度!!!");
     }
}
Spring的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>   
        <!-- 要调用的工作类 -->
        <bean id="quartzJob" class="com.kay.quartz.QuartzJob"></bean>
        <!-- 定义调用对象和调用对象的方法 -->
        <bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <!-- 调用的类 -->
            <property name="targetObject">
                <ref bean="quartzJob"/>
            </property>
            <!-- 调用类中的方法 -->
            <property name="targetMethod">
                <value>work</value>
            </property>
        </bean>
        <!-- 定义触发时间 -->
        <bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
            <property name="jobDetail">
                <ref bean="jobtask"/>
            </property>
            <!-- cron表达式 -->
            <property name="cronExpression">
                <value>10,15,20,25,30,35,40,45,50,55 * * * * ?</value>
            </property>
        </bean>
        <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  -->
        <bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                <list>
                    <ref bean="doTime"/>
                </list>
            </property>
        </bean>
   
</beans>
测试程序:

package com.kay.quartz;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainTest
{

     /**
      * @param args
      */
     public static void main(String[] args)
     {
         System.out.println("Test start.");
         ApplicationContext context = new ClassPathXmlApplicationContext("quartz-config.xml");
         //如果配置文件中将startQuertz bean的lazy-init设置为false 则不用实例化
        //context.getBean("startQuertz");
        System.out.print("Test end..");
        

     }

}
我们需要把log4j的配置文件放入src目录下,启动main类就可以了。

关于cron表达式(来自网络):

Cron 表达式包括以下 7 个字段:
•秒
•分
•小时
•月内日期
•月
•周内日期
•年(可选字段)

特殊字符

Cron 触发器利用一系列特殊字符,如下所示:
•反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。


•问号(?)字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值无关紧要。字母 L 字符是 last 的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”,否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。


•在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中,表示把执行安排在当月的第一个工作日内。


•井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。


•星号(*)字符是通配字符,表示该字段可以接受任何可能的值。
字段 允许值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /
表达式意义
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
每天早上6点

0 6 * * *

每两个小时

0 */2 * * *
晚上11点到早上8点之间每两个小时,早上八点

0 23-7/2,8 * * *

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

0 11 4 * 1-3
1月1日早上4点

0 4 1 1 *
更多知识:
http://www.ibm.com/developerworks/cn/java/j-quartz/index.html
http://www.javaeye.com/topic/117244




用的spring定时器配置
时间大小由小到大排列,从秒开始,顺序为 秒,分,时,天,月,年 *为任意 ?为无限制。
具体如下:
"0/10 * * * * ?" 每10秒触发
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
分享到:
评论

相关推荐

    fzTThreadTimer_delphi定时器_delphi_线程定时器_

    标题中的“fzTThreadTimer”是一个专为解决Delphi自带定时控件局限性而设计的线程定时器组件。描述中提到,Delphi内置的定时器控件(如TTimer)是基于消息机制工作的,这意味着它依赖于应用程序的消息循环来触发事件...

    MFC定时器的使用 MFC定时器的使用

    在Windows编程环境中,MFC(Microsoft Foundation Classes)库提供了一种方便的方式来实现应用程序中的定时功能,这就是MFC定时器。MFC定时器主要用于在特定时间间隔后触发一个事件,这在许多应用场景中都非常有用,...

    ACE完整牛逼定时器

    **ACE完整牛逼定时器详解** ACE(Adaptive Communication Environment)是一个开源的、跨平台的C++库,专为分布式实时系统设计,提供了一系列高级网络编程接口和工具。在这个“ACE完整牛逼定时器”中,我们将深入...

    STM32 定时器级联

    STM32定时器级联是STM32微控制器中一种高效利用硬件资源、扩展定时功能的方法。在STM32系列芯片中,定时器可以被配置为级联模式,以实现更复杂的定时或计数任务,比如产生精确的PWM输出、高分辨率的计数等。下面我们...

    js 封装定时器解决多次调用定时器叠加问题及定时器无法清除的问题

    在JavaScript编程中,定时器(Timer)是常用于实现异步操作的重要工具,例如延迟执行、周期性执行任务。然而,如果不妥善管理,定时器可能会引发一些问题,比如多次调用定时器导致叠加,以及定时器无法清除。本文将...

    【STM32】HAL库-使用一个定时器使能另一个定时器-主定时器触发模式demo

    如果先初始化从模式定时器3,定时器3工作在触发模式下,TRGI信号来源为定时器2的TRGO,而定时器2还未初始化,故TRGO信号来源默认是UG位,故在定时器2初始化过程中会置位UG位,从而触发定时器3的从模式触发模式,导致...

    实验8 定时器中断实验_定时器中断实验_

    在本实验“实验8 定时器中断实验”中,我们将深入探讨单片机中的一个重要功能模块——定时器,以及如何使用C语言进行编程。定时器中断是嵌入式系统和微控制器应用中的核心概念,它允许系统在执行其他任务的同时,...

    51单片机定时器C语言程序

    根据给定的文件信息,我们可以总结出以下关于“51单片机定时器C语言程序”的相关知识点: ### 一、51单片机简介 51单片机是一种广泛应用于电子设备中的微控制器,其核心是8位的中央处理器(CPU)。51单片机因其...

    实验8 定时器中断实验_keil_kei_8位定时器代码_

    在本实验中,我们将深入探讨8位定时器中断在微控制器中的应用,主要使用的是Keil μVision集成开发环境(IDE)以及相关的编程语言。定时器中断是嵌入式系统中一个非常重要的功能,它允许处理器在执行其他任务的同时...

    51定时器计算工具

    51定时器计算工具是一款专为51单片机编程者设计的应用软件,它简化了51系列定时器的设置和计算过程。51单片机是广泛应用在电子工程、物联网设备、自动化控制等领域的微控制器,其内部包含了多个定时器资源,用于执行...

    TMS320F2812 定时器1和定时器2的使用

    在不依赖BIOS(板级支持包)的情况下,我们可以直接利用其内部的硬件资源,如定时器1和定时器2进行系统定时和中断处理。这两个定时器与定时器0在功能上相似,但提供了额外的灵活性,以满足不同的应用需求。 定时器1...

    STM32定时器计算器

    STM32定时器计算器是一款专为STM32微控制器设计的实用工具,它帮助开发者快速准确地计算出在不同工作模式下,定时器所需的配置参数,如频率、分频系数和周期设定值。STM32系列是基于ARM Cortex-M内核的微控制器,...

    STM32定时器计算工具

    STM32定时器计算工具是专为STM32微控制器设计的一款实用软件,它简化了在嵌入式系统开发过程中对定时器配置的复杂计算。STM32是意法半导体(STMicroelectronics)推出的基于ARM Cortex-M内核的微控制器系列,广泛...

    C#版本多媒体定时器

    **C# 版本多媒体定时器详解** 在C#编程中,我们经常需要处理精确的定时任务,特别是在多媒体应用中,如音乐播放、视频处理等。传统的System.Timers.Timer或System.Threading.Timer虽然方便,但在某些情况下,它们的...

    一个定时器实现多个虚拟定时器具体代码实现

    在IT领域,定时器是一种非常重要的工具,广泛应用于各种软件系统中,如操作系统、网络服务、游戏开发等。虚拟定时器则是对真实物理时钟的一种抽象,它允许开发者创建多个独立的定时任务,每个任务都有自己的定时逻辑...

    C#调用多媒体定时器

    在编程领域,定时器是一种非常重要的工具,它允许程序在特定的时间间隔执行某项操作。在C#中,我们可以利用多种方法实现定时器功能,其中之一就是通过调用底层的多媒体定时器API。本文将深入探讨如何在C#中调用采用...

    QT高精度定时器

    QT高精度定时器是针对那些需要毫秒级别甚至更精细时间控制的应用程序设计的解决方案。在常规的QT和Windows系统中,内置的定时器在处理毫秒级别的延时时可能存在精度不足的问题,这可能会影响到一些对时间精确度要求...

    STM32 定时器中断实验

    STM32 定时器中断实验是嵌入式系统开发中的一个重要环节,尤其在基于Cortex-M32内核的STM32单片机中,定时器中断的应用广泛且至关重要。STM32系列微控制器拥有丰富的定时器资源,如基本定时器、通用定时器、高级...

    辅助软件 定时器计算器 辅助软件 定时器计算器

    辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 ...

    C#中定时器停止问题

    在C#编程中,定时器(Timer)是一个非常常见的组件,用于执行周期性的任务。它在许多场景下都非常有用,比如实现数据轮询、界面更新或者其他时间触发的事件。然而,正确地管理和停止定时器是确保程序高效运行的关键...

Global site tag (gtag.js) - Google Analytics