<bean id="cacheRefreshAllTaskTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="cacheRefreshAllTaskDetail" />
<property name="startDelay" value="10" />
<property name="cronExpression" value="0 0 03 ? * SUN" />
</bean>
在spring的定时任务中,我们通过cronExpression参数来指定定时任务触发的时间,采用的是一个表达式 ,它有六个(或七个)值域,分别对应着:
{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}
除了最后一项可以省略外,前六项都必须指明,中间以 ‘空格’ 隔开各项。
了解了各个字段是代表什么之后我们就可以进入设置了:
首先是字段的范围:
{秒数} {分钟} :[0,59]
{小时}:[0,23]
{日期}:[1,31]
{月份}:[1,12]==[JAN,DEC]
{星期}:[1,7] ==[SUN,SAT]==> 注意周天用1代表,周一用2代表,以此类推.
{年份}:[1970,2099]
特殊值,这也是我们要经常用到的:
* 代表每隔1单位都会触发;对应配置的位置分别是每隔一秒、分钟、小时、天、月、周、年来触发。
, 代表在指定的单位触发;以秒为例:”0,15,45”代表0秒、15秒和45秒时触发任务
- 代表在指定的范围内触发,以秒为例:”25-45”代表从25秒开始触发到45秒结束触发,每隔1秒触发1次
/ 代表触发步进(step),”/”前面的值代表初始值(“*”等同”0”),后面的值代表偏移量。例如:a/b 从a开始,每隔b单位执行一次。
L 如果{日期}占位符如果是”L”,即意味着当月的最后一天触发
如果{星期}占位符如果是”L”,即意味着星期的的最后一天触发,即星期六触发
W 意味着在本月内离当天最近的工作日触发,所谓最近工作日,即当天到工作日的前后最短距离,如果当天即为工作日,则距离为0;所谓本月内的说法,就是不能跨月取到最近工作日,即使前/后月份的最后一天/第一天确实满足最近工作日;因此,”LW”则意味着本月的最后一个工作日触发,”W”强烈依赖{月份}
# 只用于{星期},用来指定具体的周数,”#”前面代表星期,”#”后面代表本月第几周,比如”2#2”表示本月第二周的星期一,”5#3”表示本月第三周的星期四
除此之外,还有一个 ?,这是因为在设置 {日期} {星期}的时候会产生冲突,设置了日期时就会把星期置为?,设置了星期时就会把日期置为?
————————————————————
下面是我百度的一些示例:
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分每分触发
0 0/5 14 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发)
0 0/5 14,18 * * ? 每天下午的 2点到2点59分、18点到18点59分(整点开始,每隔5分触发)
0 0-5 14 * * ? 每天下午的 2点到2点05分每分触发
0 10,44 14 ? 3 WED 3月分每周三下午的 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分触发