spring 定时任务 cronexpression 表达式解析

本文介绍了Spring定时任务中cronExpression的使用,包括其表达式的六个(或七个)值域,如秒、分、小时、日期、月份、星期。详细解析了每个字段的范围和特殊值,如*、,、-、/、L、W、#的含义,并给出了多个示例来展示不同表达式的触发时机。" 78012205,1489831,高并发服务设计——深入理解缓存策略与实现,"['高并发', '缓存', 'Java', 'Guava', 'EhCache', 'MapDB']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<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分触发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值