Spring Cron表达式调整:如何让工作日9-17点每30分执行且末次为17:00
解决Spring Cron定时任务最后一次执行时间问题
你遇到的问题是原表达式里的9-17包含17点整和17点30分,而0/30会在每个小时的0分、30分触发,导致17:30额外执行一次。要让最后一次执行停在17:00,有两种简洁的修改方式:
方法一:拆分表达式组合
Spring的@Scheduled注解支持传入多个表达式的数组,直接覆盖所有需要执行的时间点:
@Scheduled(cron = {"0 0/30 9-16 * * MON-FRI", "0 0 17 * * MON-FRI"}) public void scheduledTask() { // 你的任务逻辑 }
- 第一个表达式
0 0/30 9-16 * * MON-FRI:处理工作日9:00到16:30的每30分钟执行(9:00、9:30...16:30) - 第二个表达式
0 0 17 * * MON-FRI:单独触发工作日17:00的执行
方法二:精确分钟匹配
也可以指定分钟为0,30,缩小小时范围到9-16,再补充17:00的单独触发,效果和方法一完全一致:
@Scheduled(cron = {"0 0,30 9-16 * * MON-FRI", "0 0 17 * * MON-FRI"}) public void scheduledTask() { // 你的任务逻辑 }
两种方式都能确保最后一次执行时间为17:00,不会触发17:30的额外任务。
内容的提问来源于stack exchange,提问作者dev-rifaii
相关产品推荐
相关产品推荐

