Corn表达式用法

简述

Cron 表达式是一个具有时间含义的字符串,字符串以 5~6 个空格隔开,分为 6~7 个域,格式为X X X X X X。其中X是一个域的占位符。最后一个代表年份的域非必须,可以省略。单个域有多个取值时,使用半角逗号,隔开取值。每个域可以是确定的取值,也可以是具有逻辑意义的特殊字符,每个域最多支持一个前导零。例如

指定 2022 年每天上午 8:15 执行任务,Cron 表达式可指定为 `0 15 8 ? * * 2022`或者
  `0 15 08 ? * * 2022`,但是不能指定为`0 15 008 ? * * 2022`

 域的取值及字符用法

是否必需取值范围特殊字符
[0, 59]* , - /
分钟[0, 59]* , - /
小时[0, 23]* , - /
日期[1, 31]* , - / ? L W
月份[1, 12]或[JAN, DEC]* , - /
星期[1, 7]或[MON, SUN]。若您使用[1, 7]表达方式,1代表星期一,7代表星期日。* , - / ? L #
[当前年份,2099]* , - /

用法实例

示例说明
0 15 10 ? * *每天上午10:15执行任务
0 15 10 * * ?每天上午10:15执行任务
0 0 12 * * ?每天中午12:00执行任务
0 0 10,14,16 * * ?每天上午10:00点、下午14:00以及下午16:00执行任务
0 0/30 9-17 * * ?每天上午09:00到下午17:00时间段内每隔半小时执行任务
0 * 14 * * ?每天下午14:00到下午14:59时间段内每隔1分钟执行任务
0 0-5 14 * * ?每天下午14:00到下午14:05时间段内每隔1分钟执行任务
0 0/5 14 * * ?每天下午14:00到下午14:55时间段内每隔5分钟执行任务
0 0/5 14,18 * * ?每天下午14:00到下午14:55、下午18:00到下午18:55时间段内每隔5分钟执行任务
0 0 12 ? * WED每个星期三中午12:00执行任务
0 15 10 15 * ?每月15日上午10:15执行任务
0 15 10 L * ?每月最后一日上午10:15执行任务
0 15 10 ? * 6L每月最后一个星期六上午10:15执行任务
0 15 10 ? * 6#3每月第三个星期六上午10:15执行任务
0 10,44 14 ? 3 WED每年3月的每个星期三下午14:10和14:44执行任务
0 15 10 ? * * 20222022年每天上午10:15执行任务
0 15 10 ? * * *每年每天上午10:15执行任务
0 0/5 14,18 * * ? 20222022年每天下午14:00到下午14:55、下午18:00到下午18:55时间段内每隔5分钟执行任务
0 15 10 ? * 6#3 2022,20232022年至2023年每月第三个星期六上午10:15执行任务
0 0/30 9-17 * * ? 2022-20252022年至2025年每天上午09:00到下午17:30时间段内每隔半小时执行任务
0 10,44 14 ? 3 WED 2022/2从2022年开始,每隔两年3月的每个星期三下午14:10和14:44执行任务

<think>我们正在处理关于Cron表达式在月底配置的问题。根据引用资料,Cron表达式用于定时任务调度,其中月底的配置通常使用"L"字符。引用[1]提到:在天(月)子表达式中,“L”表示一个月的最后一天。引用[2]和引用[4]中给出了具体例子:每月最后一天的10:15AM的表达式是`01510L*?`。另外,引用[3]也解释了L在月中的含义:表示这个月最后一天。因此,要配置在月底运行,我们可以在Cron表达式的“日”字段使用“L”。例如:-每月最后一天的23点执行:`0023L*?`-每月最后一天的10:15AM执行:`01510L*?`注意:Cron表达式一般有6或7个字段(秒分时日月周年),其中“年”字段可以省略。在Quartz中常用6个字段,其中“周”字段和“日”字段可能会冲突,因此通常会在其中一个使用'?'表示不指定。另外,引用[4]中还有一个例子:每月最后一个周五的表达式是`008?*6L`(这里6表示周五,因为周日为1,周一为2,...周六为7,但有些系统定义周日为0,周六为6,所以要注意系统差异)。在Quartz中,周字段1表示周日,7表示周六,所以周五就是6。因此,`008?*6L`表示每月最后一个周五的8点执行。所以,用户需要配置月底运行,如果只是每月的最后一天,那么使用`L`在日字段即可。如果是指定星期几的最后一个(比如最后一个周五),那么使用在周字段的格式为`6L`(以周五为例)。总结:1.每月最后一天:在日字段使用`L`,周字段使用`?`,例如:`0012L*?`表示每月最后一天的中午12点执行。2.每月最后一个星期五:在周字段使用`6L`(Quartz中周五为6),日字段使用`?`,例如:`0012?*6L`表示每月最后一个星期五的中午12点执行。注意:不同系统对星期的开始定义可能不同,但Quartz中1=周日,2=周一,3=周二,4=周三,5=周四,6=周五,7=周六。根据用户的问题,他关注的是“月底”,所以主要是最后一天的情况。因此,我们给出配置最后一天的表达式。示例:假设要在每月最后一天的晚上11点30分执行,表达式为:`03023L*?`注意:Cron表达式中的月份和周字段不能同时指定(避免冲突),所以另一个字段通常用`*`或`?`。在日字段使用`L`时,周字段通常用`?`。另外,引用[5]提到有更易于理解的cron表达式组件,但用户的问题是如何配置,所以我们直接给出表达式即可。因此,回答如下:</think>### Cron表达式配置月底运行的方法 根据引用资料,Cron表达式中表示月底的关键字符是`L`(Last的缩写)。以下是具体配置方法: #### 1. **每月最后一天执行** - **表达式格式**:`0 0 0 L * ?` - **说明**: - `L`在**日字段**表示该月最后一天 - `*`在月字段表示每月都执行 - `?`在周字段表示忽略周设置 - **示例**: - 每月最后一天23点执行:`0 0 23 L * ?` [^4] - 每月最后一天10:15 AM执行:`0 15 10 L * ?` [^2] #### 2. **每月最后一个周五执行** - **表达式格式**:`0 0 12 ? * 6L` - **说明**: - `6L`在**周字段**:`6`表示周五(Quartz中1=周日, 6=周五),`L`表示最后一周 - `?`在日字段表示忽略日设置 - **示例**: - 每月最后一个周五8点执行:`0 0 8 ? * 6L` [^4] #### 3. **特殊注意事项** - `L`字符在**日字段**和**周字段**含义不同: - 日字段:`L` → 当月最后一天 - 周字段:`6L` → 当月最后一个周五 [^1] - 避免冲突:当日字段使用`L`时,周字段需设为`?`(反之亦然)[^3] - 兼容性:不同系统对星期的编号可能不同(如Linux Cron中0=周日),需确认调度系统规范 [^3] #### 4. **应用场景示例** - 财务系统:每月最后一天23点生成报表 → `0 0 23 L * ?` - 备份任务:每月最后一个周五凌晨执行 → `0 0 0 ? * 6L` - 薪资计算:每月最后一天18点触发 → `0 0 18 L * ?` > 提示:可通过在线工具(如Cron Maker)验证表达式逻辑,或使用引用[5]提到的可视化组件简化配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值