[spring-framework]Spring定时器的配置和使用

开发中我们常常会做一些定时任务,这些任务有开始时间,并会按一定的周期或规则执行。如此我们在Java程序开发中使用定时器来处理定时任务。

<!-- MessageRequestTask类中包含了msgRequest方法,用于执行定时任务 -->
<bean id="msg_request" class="com.santorini.task.timer.MessageRequestTask"></bean><!-- 定时器配置 -->
<bean id="timeDitail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="msg_request"></property><property name="targetMethod" value="msgRequest"></property>
</bean><!-- 定义时间间隔触发器 -->
<bean id="timeTigger" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail" ref="timeDitail"></property><property name="cronExpression"><value>0 */5 * * * ?</value></property>
</bean><!-- 启动定时器 -->
<bean id="startJob" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers"><list><ref bean="timeTigger" /></list></property>
</bean>

如此,无论是普通的Main程序或是JavaWeb程序,只要我们初始化了Spring容器,定时任务就可以执行了.

JavaWeb中Spring的初始化放在Web.xml中写:

<!-- 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定时器时间配置规则:

org.springframework.scheduling.quartz.CronTriggerBean允许你更精确地控制任务的运行时间,只需要设置其cronExpression属性。

一个cronExpression表达式有至少6个(也可能是7个)由空格分隔的时间元素。从左至右,这些元素的定义如下:

1.秒(0–59)2.分钟(0–59)3.小时(0–23)4.月份中的日期(1–31)5.月份(1–12或JAN–DEC)6.星期中的日期(1–7或SUN–SAT)7.年份(1970–2099)0 0 10,14,16 * * ?每天上午10点,下午2点和下午4点0 0,15,30,45 * 1-10 * ?每月前10天每隔15分钟30 0 0 1 1 ? 2012在2012年1月1日午夜过30秒时0 0 8-5 ? * MON-FRI每个工作日的工作时间各个时间可用值如下:秒0-59 , - * /分0-59 , - * /小时0-23 , - * /日1-31 , - * ? / L W C月1-12 or JAN-DEC , - * /周几1-7 or SUN-SAT , - * ? / L C #年(可选字段) empty, 1970-2099 , - * /

可用值详细分析如下:

“*”——字符可以用于所有字段,在“分”字段中设为"*"表示"每一分钟"的含义。

“?”——字符可以用在“日”和“周几”字段.它用来指定'不明确的值'.这在你需要指定这两个字段中的某一个值而不是另外一个的时候会被用到。在后面的例子中可以看到其含义。

“-”——字符被用来指定一个值的范围,比如在“小时”字段中设为"10-12"表示"10点到12点"。

“,”——字符指定数个值。比如在“周几”字段中设为"MON,WED,FRI"表示"the days Monday, Wednesday, and Friday"。

“/”——字符用来指定一个值的的增加幅度.比如在“秒”字段中设置为"0/15"表示"第0, 15, 30,和45秒"。而"5/15"则表示"第5, 20, 35,和50".在'/'前加"*"字符相当于指定从0秒开始.每个字段都有一系列可以开始或结束的数值。对于“秒”和“分”字段来说,其数值范围为0到59,对于“小时”字段来说其为0到23,对于“日”字段来说为0到31,而对于“月”字段来说为1到12。"/"字段仅仅只是帮助你在允许的数值范围内从开始"第n"的值。

“L”——字符可用在“日”和“周几”这两个字段。它是"last"的缩写,但是在这两个字段中有不同的含义。例如,“日”字段中的"L"表示"一个月中的最后一天" ——对于一月就是31号对于二月来说就是28号(非闰年)。而在“周几”字段中,它简单的表示"7" or "SAT",但是如果在“周几”字段中使用时跟在某个数字之后,它表示"该月最后一个星期×" ——比如"6L"表示"该月最后一个周五"。当使用'L'选项时,指定确定的列表或者范围非常重要,否则你会被结果搞糊涂的。

“W”——可用于“日”字段。用来指定历给定日期最近的工作日(周一到周五)。比如你将“日”字段设为"15W",意为: "离该月15号最近的工作日"。因此如果15号为周六,触发器会在14号即周五调用。如果15号为周日,触发器会在16号也就是周一触发。如果15号为周二,那么当天就会触发。然而如果你将“日”字段设为"1W",而一号又是周六,触发器会于下周一也就是当月的3号触发,因为它不会越过当月的值的范围边界。'W'字符只能用于“日”字段的值为单独的一天而不是一系列值的时候。

“L”和“W”可以组合用于“日”字段表示为'LW',意为"该月最后一个工作日"。

“#”——字符可用于“周几”字段。该字符表示“该月第几个周×”,比如"6#3"表示该月第三个周五( 6表示周五而"#3"该月第三个)。再比如: "2#1" =表示该月第一个周一而"4#5" =该月第五个周三。注意如果你指定"#5"该月没有第五个“周×”,该月是不会触发的。

“C”——字符可用于“日”和“周几”字段,它是"calendar"的缩写。它表示为基于相关的日历所计算出的值(如果有的话)。如果没有关联的日历,那它等同于包含全部日历。“日”字段值为"5C"表示"日历中的第一天或者5号以后",“周几”字段值为"1C"则表示"日历中的第一天或者周日以后"。

对于“月份”字段和“周几”字段来说合法的字符都不是大小写敏感的。

一些例子:

"0 0 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分每分钟一次触发

"0 0/5 14 * * ?"每天从下午2点开始到2:55分结束每5分钟一次触发

"0 0/5 14,18 * * ?"每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发

"0 0-5 14 * * ?"每天14:00至14:05每分钟一次触发

"0 10,44 14 ? 3 WED"三月的每周三的14:10和14: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

转载于:https://www.cnblogs.com/longshiyVip/p/5043823.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装Microsoft Windows SDK 7.1时出现的错误(附解决办法)

From: http://blog.sina.com.cn/s/blog_617c05b001015baw.html 错误回放一: A problem occurred while installing selected Windows SDKcomponents. Installation of the "Microsoft Windows SDK for Windows 7Compilers for x86" product has reported the follow…

上载数据

*&---------------------------------------------------------------------**& 包括 ZHENGZJ_TEST001_FORM*&---------------------------------------------------------------------**&--------------------------------------------------…

[react] react中的setState执行机制是什么呢?

[react] react中的setState执行机制是什么呢&#xff1f; 1.将setState传入的partialState参数存储在当前组件实例的state暂存队列中。 2.判断当前React是否处于批量更新状态&#xff0c;如果是&#xff0c;将当前组件加入待更新的组件队列中。 3.如果未处于批量更新状态&…

Linux 的帐号与群组:有效与初始群组、groups, newgrp

关于群组&#xff1a; 有效与初始群组、groups, newgrp认识了帐号相关的两个档案 /etc/passwd 与 /etc/shadow 之后&#xff0c;您或许还是会觉得奇怪&#xff0c; 那么群组的设定档在哪里&#xff1f;还有&#xff0c;在 /etc/passwd 的第四栏不是所谓的 GID 吗&#xff1f;那…

提示缺少Qedit.h问题

From&#xff1a; http://blog.csdn.net/jsmiler/article/details/6495763 DirectX 9.0 SDK 开发包以及扩展包下载(February 2005) http://dev.csdn.net/article/62/62941.shtm。直接到微软官网下的话&#xff0c;需要validation确认。 http://download.microsoft.com/downlo…

Oracle Buffer Cache的keep、recycle、default pool概念图解

Oracle Buffer Cache的keep、recycle、default pool概念图解 转载于:https://blog.51cto.com/maclean/1278284

[react] 同时引用这三个库react.js、react-dom.js和babel.js它们都有什么作用?

[react] 同时引用这三个库react.js、react-dom.js和babel.js它们都有什么作用&#xff1f; React.js: React中的组件(Component)、Context、hooks等核心Api&#xff0c;还有虚拟DOM的比较、Fiber的算法实现等React-dom.js 与web浏览器DOM相关的API&#xff0c;比如虚拟DOM的挂…

计算程序执行时间

time命令用于计量运行时间。real从启动到终止&#xff0c;user用户空间时间&#xff0c;sys内核空间时间。转载于:https://www.cnblogs.com/embedded-linux/p/5046726.html

程序中调用命令行命令,不显示那个黑黑的DOS窗口

From: http://hi.baidu.com/yanqiuge/item/5da466c3d3f18453ad00ef1d 在程序中使用命令行时&#xff0c;会有黑黑的DOS窗口&#xff0c;很不爽&#xff0c;在网上查了一下&#xff0c;写一个有点实用价值的小程序&#xff1a; /****************************** 文件名&#…

Oracle Row cache lock图解

Oracle Row cache lock(dictionary cache)图解 转载于:https://blog.51cto.com/maclean/1278273

[react] create-react-app创建新运用怎么解决卡的问题?

[react] create-react-app创建新运用怎么解决卡的问题&#xff1f; (这个问题应该描述的是使用cra脚手架创建项目慢的问题) 这是因为cra默认使用的国外的npm源&#xff0c;替换为国内的npm源即&#xff0c;如淘宝源npm config set registry https://registry.npm.taobao.org 个…

C语言基础知识汇总

c语言执行步骤&#xff1a; 一.编辑程序 1.编写c语言的代码&#xff0c;保存在扩展名.c的文件中&#xff0c;源文件。 2.编写代码有三种方式&#xff1a; a.vi命令方式系统自带 b.ultraedit网络下载 c.xcode网络下载 二.编译(gcc 文件名.c) 将c语言转换成计算机识别的代码 三.…

PHP中的逆波兰式应用

定义  逆波兰式&#xff08;Reverse Polish notation&#xff0c;RPN&#xff0c;或逆波兰记法&#xff09;&#xff0c;也叫后缀表达式(将运算符写在操作数之后) 如&#xff1a;我们平时写ab&#xff0c;这是中缀表达式&#xff0c;写成后缀表达式就是&#xff1a;ab (ab)*c…

执行dos命令,不出现黑色的dos窗口

先准备一个.vbs文件&#xff0c;写好内容&#xff1a; Set ws CreateObject("Wscript.Shell") ws.run "cmd /c a.bat", vbhide再准备相应的.bat文件&#xff1a; dir /s /b * > a.logok, 运行.vbs文件吧

[react] 展示组件和容器组件有什么区别?

[react] 展示组件和容器组件有什么区别&#xff1f; 展示组件&#xff08;Presentational Component&#xff09; 关注页面的展示效果&#xff08;外观&#xff09; 内部可以包含展示组件和容器组件&#xff0c;通常会包含一些自己的DOM标记和样式(style) 通常允许通过this.pr…

Java学习----方法的重载

一个类中有多个同名的参数不一样的方法。 作用&#xff1a;可以根据不同的条件调用不同的方法。 注意&#xff1a;java不会因为方法的返回类型或者权限的不同而判断为不同的两个方法。 public class Student {public Student() {System.out.println("Student构造方法1&quo…

[react] react的书写规范有哪些

[react] react的书写规范有哪些 React元素必须使用大驼峰命名的方式组件尽量命名&#xff0c;方便进行调试JSX尽量用小括号包起来&#xff0c;更加直观&#xff0c;防止换行时出错 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持…

LAMP源代码编译整理

在我们编译安装Apache 之前&#xff0c;要考虑的是让Apache 在什么样的模式下运行&#xff0c;因为从Apache 2.0 就加入了MPM&#xff08;Multi-Processing Modules&#xff0c;多道处理模块&#xff09;。Apache 2.0 在性能上的改善最吸引人。在支持POSIX 线程的Unix 系统上&a…

windows平台编译vlc

From: http://blog.csdn.net/guanshangming/article/details/5581270 转自:http://jeremiah.blog.51cto.com/539865/114190Jeremiah刚刚工作几个月&#xff0c;参与的第一个项目是与视频监控有关&#xff0c;分配给我的任务就是用开源的vlc做一个自己的播放器。对于开源项目来…

Appium--环境搭建

Appium介绍 Appium是一个移动端的自动化框架&#xff0c;可以做H5、Web测试、可以做功能测试&#xff08;Android、IOS&#xff09;、可以做跨进程测试&#xff0c;且是跨平台的。Appium做测试的时候支持的语言有很多种&#xff0c;包括java、Python、ruby、PHP、C#等。由于我熟…