工具/原料
spring-2.0.6.jar Spring框架的核心包
jta.jar 会用到包中的usertransaction,具体什么用此处暂时不论
quartz-1.6.0.jar 会用到CronTrigger这个类,通过表达式实现精确的定时
commons-logging-1.1.1.jar 日志管理包
commons-collections-3.2.1.jar 集合工具包
首先是配置你要定时加载的目标类
<bean id="myTimer" class="com.timer.MyTimer"></bean>
配置你的定时器详情
<!-- 定时器配置 -->
<bean id="timeDitail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="myTimer"></property><!-- 指定任务类 -->
<property name="targetMethod" value="doit"></property><!-- 指定任务方法 -->
</bean>
配置定时器时间间隔
<!-- 定义时间间隔触发器 -->
<bean id="timeTigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="timeDitail"></property>
<property name="cronExpression">
<value>*/5 * * * * ?</value>
</property>
</bean>
配置启动定时器
<!-- 启动定时器 -->
<bean id="startJob" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="timeTigger"/>
</list>
</property>
</bean>
在web中配置配置文件地址和类加载监听器
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
----------------------------------------------------------------------------------
spring的定时任务配置分为三个步骤:
1、定义任务
2、任务执行策略配置
3、启动任务
1、定义任务
<!--要定时执行的方法-->
<bean id="testTaskJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<!--指定要定时执行的方法所在类,将定时任务定义成bean-->
<ref bean="testTask" />
</property>
<property name="targetMethod">
<!--指定定时执行的方法-->
<value>execute</value>
</property>
<property name="concurrent">
<!--指定目标封装为有状态的任务,有状态的任务不能并发执行,无状态的任务可并发执行-->
<value>false</value>
</property>
</bean>
2、任务执行策略配置
(1)指定重复间隔的定时任务
<!-- 调度时间设置-->
<bean id="testTaskJobTrigger"
class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail">
<ref bean="testTaskJob" />
</property>
<!-- 延时启动时间,单位ms -->
<property name="startDelay" value="60000"></property>
<!-- 重复间隔时间,单位ms -->
<property name="repeatInterval" value="60000">
</property>
</bean>
(2)按周期执行的任务
<!-- 定义触发时间 -->
<bean id="doTime"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="testTaskJob" />
</property>
<!-- cron表达式,此处是每天10点42执行 -->
<property name="cronExpression">
<value>0 42 10 * * ?</value>
</property>
</bean>
3、启动任务
<!--启动工作-->
<bean lazy-init="false"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!-- 这里添加多个定时任务触发器,对应第2步的bean id -->
<ref local="testTaskJobTrigger" />
</list>
</property>
</bean>
至此,系统启动的时候,就能加载定时任务,并按照指定的定时策略执行。
对于一次性定时任务,一般有如下几种形式:(1)使用spring的init方法;(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 *
有些子表达式能包含一些范围或列表
例如:子表达式(天(星期))可以为 “MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT”
“*”:字符代表所有可能的值
因此,“*”在子表达式(月)里表示每个月的含义,“*”在子表达式(天(星期))表示星期的每一天
“/”:字符用来指定数值的增量
例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟 ;
在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样
“?”:字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值
当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”
“L”: 字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写
但是它在两个子表达式里的含义是不同的。
在天(月)子表达式中,“L”表示一个月的最后一天 ,
在天(星期)自表达式中,“L”表示一个星期的最后一天,也就是SAT
如果在“L”前有具体的内容,它就具有其他的含义了
例如:“6L”表示这个月的倒数第6天,“FRIL”表示这个月的最后一个星期五
注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题
分享到:
相关推荐
Spring 中的 Quartz 配置-Spring 定时器-java 定时器 在 Spring 框架中,Quartz 是一个非常流行的开源作业调度器,可以实现任务的定时执行。在本篇文章中,我们将讨论如何在 Spring 中配置 Quartz,以实现 Java ...
Spring定时器,也被称为Spring Boot的定时任务,是Spring框架中的一个强大功能,它允许开发者在应用程序中安排周期性任务的执行。这个功能基于Java的`java.util.concurrent.ScheduledExecutorService`,并通过Spring...
通过以上步骤,你就可以在Spring MVC项目中使用Spring内置的定时器或Quartz来执行定时任务了。两者各有优劣,Spring内置定时器简单易用,适合轻量级的定时需求;而Quartz功能强大,适用于复杂的定时场景,但配置和...
在Spring框架中,定时任务是通过Spring的Task Execution和Scheduling模块实现的,这个模块提供了在应用程序上下文中执行异步任务和定时任务的能力。在标题"spring定时器的包和配置文件"中,我们讨论的核心是Spring...
Spring框架和Java内置的定时器提供了两种不同的方式来实现这样的功能。 首先,我们来看Spring定时器。Spring使用的是Quartz库来实现定时任务管理。在给出的例子中,可以看到配置文件中定义了几个关键的bean: 1. `...
通过上述内容,我们可以看出Spring框架提供的Cron定时任务配置非常强大和灵活。开发人员可以根据具体需求,利用Cron表达式来精确控制任务的执行时间,从而实现各种复杂的定时任务场景。希望本文能帮助读者更好地理解...
在IT领域,特别是Java开发中,Spring框架因其强大的功能和灵活性而备受青睐。其中,Spring提供的定时任务功能,使得开发者能够在应用中轻松实现基于时间的任务调度。本文将深入解析Spring中配置定时器的方法,帮助...
本文将以一个具体的例子——商丘地区集抄系统每日向中间库传输日冻结数据的过程——来介绍如何使用Spring框架中的`java.util.Timer`实现定时任务。 #### Java Timer的实现 1. **定义定时任务类** 首先,需要创建...
Spring框架支持Cron表达式的使用,使其成为配置定时任务的首选方式。 ##### 基本语法 - 秒:0-59 - 分:0-59 - 小时:0-23 - 日期:1-31 - 月份:1-12 或者 JAN-DEC - 星期:1-7 或者 SUN-SAT (1 表示星期一) - ...
在Spring框架中,定时任务是十分重要的功能,它允许开发者安排任务在特定的时间点或按照预定义的周期执行。在本项目中,我们将探讨如何利用Spring集成QuartzJobBean实现定时器的详细配置。 首先,Quartz是一个开源...
在Spring框架中,定时任务是通过Spring Task模块来实现的,它提供了强大的任务调度和执行功能,能够方便地实现应用程序中的周期性任务。本篇将详细介绍如何配置和使用Spring的定时器来定时调用任务。 首先,让我们...
本文将深入探讨这两个概念,以及如何在Spring框架中配置和使用定时器。 首先,Java定时器(java.util.Timer)是Java标准库提供的一种基础定时服务。它允许开发者安排一次性或重复的任务,这些任务将以单独的线程...
在Java开发中,Spring框架是不可或缺的一部分,它提供了一种优雅的方式来管理应用程序的组件和依赖关系。而Spring的定时任务功能则允许我们在指定的时间执行特定的任务,极大地提升了工作效率。本篇将详细介绍如何在...
### Spring Quartz 定时器的简单配置与使用 在现代软件开发中,特别是Java领域,定时任务是非常常见的需求之一。Spring框架提供了强大的功能支持来帮助开发者实现这些需求,其中Spring Quartz是一个非常流行的解决...
Spring的Quartz定时器提供了一种强大且灵活的方式来管理和执行定时任务,适合在各种复杂的应用场景中使用。 在压缩包文件`quartzTimerDemo`中,可能包含了实现上述步骤的示例代码,包括配置文件、Job类和启动定时...
Spring框架作为Java领域广泛使用的轻量级框架,提供了与JDK定时器结合以及集成第三方库如Quartz的方式,来实现定时任务。本篇文章将详细探讨“spring+jdk定时器”的实现方式。 首先,我们来看JDK自带的定时器——`...
Spring框架是Java开发中广泛使用的轻量级框架,它的强大功能之一就是提供了定时任务支持,这在企业级应用中非常常见,例如数据同步、报表生成等场景。在本主题"spring的定时器设置"中,我们将深入探讨Spring如何配置...
在Spring框架中,有两种主要的方法来实现定时任务:Spring自带的`@Scheduled`注解和引入第三方库Quartz。这两种方法都可以帮助开发者在特定的时间点执行任务,为应用程序添加计划任务的能力。 首先,我们来看看使用...
本文将深入探讨如何在Spring框架中进行动态定时器的封装,结合标签"源码"和"工具",我们将探讨Spring与Quartz库的整合,以及如何通过源码理解其实现机制。 首先,让我们了解一下Spring的定时任务支持。Spring提供了...
在Spring框架中,配置定时器是为了实现周期性或定时的任务调度,这对于执行如数据清理、报告生成等后台操作非常有用。在提供的文档中,我们看到的是使用Spring的Timer模块来配置定时任务的方法。下面将详细介绍如何...