在cron里使用L报错 @Scheduled method 'print': For input string: "L"

在实际业务中想实现一个功能(每个月最后一天执行任务),然后扒了一些博客就使用下面这种方法

    @Scheduled(cron = "59 59 23 L *  ?") private void print(){System.out.println("Current Time: " + LocalDateTime.now());}

一运行就程序错误:Encountered invalid @Scheduled method ‘print’: For input string: “L”,意思就是说这定时器无效。

后来就去专门看了一下Scheduled的参数

* 表示所有值。 例如:在分的字段上设置 *,表示每一分钟都会触发。
? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为”?” 具体设置为 0 0 0 10 * ?
- 表示区间。例如 在小时上设置 “10-12”,表示 10,11,12点都会触发。
, 表示指定多个值,例如在周字段上设置 “MON,WED,FRI” 表示周一,周三和周五触发
/ 用于递增触发。如在秒上面设置”5/15” 表示从5秒开始,每增15秒触发(5,20,35,50)。 在日字段上设置’1/3’所示每月1号开始,每隔三天触发一次。
L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于”7”或”SAT”。如果在”L”前加上数字,则表示该数据的最后一个。例如在周字段上设置”6L”这样的格式,则表示“本月最后一个星期五”
W 表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上置”15W”,表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为 “1W”,它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,”W”前只能设置具体的数字,不允许区间”-“)。
# 序号(表示每月的第几个周几),例如在周字段上设置”6#3”表示在每月的第三个周六.注意如果指定”#5”,正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了) ;小提示:’L’和 ‘W’可以一组合使用。如果在日字段上设置”LW”,则表示在本月的最后一个工作日触发;周字段的设置,若使用英文字母是不区分大小写的,即MON与mon相同。

最后思路就是这样

package com.admin.config;import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.Date;/*** @author LunarYouI* @create 2022-06-23 17:10*/@Component // 1.实例化到spring容器中
@EnableScheduling // 2.开启定时任务
public class EndTimer {@Scheduled(cron = "59 59 23 28-31 * ?") // 3.每月最后一天的28~31天都执行此代码private void print(){//4、将范围缩小到28~31后,每次调用此接口来判断当天是否是当月的最后一天boolean flag = isLastDayOfMonth(new Date());if(flag){System.out.println("当月最后一天: " + LocalDateTime.now());}}/*** 判断给定日期是否是当月的最后一天* @param date* @return*/public static boolean isLastDayOfMonth(Date date) {//1、创建日历类Calendar calendar = Calendar.getInstance();//2、设置当前传递的时间,不设就是当前系统日期calendar.setTime(date);//3、data的日期是N,那么N+1【假设当月是30天,30+1=31,如果当月只有30天,那么最终结果为1,也就是下月的1号】calendar.set(Calendar.DATE, (calendar.get(Calendar.DATE) + 1));//4、判断是否是当月最后一天【1==1那么就表明当天是当月的最后一天返回true】if (calendar.get(Calendar.DAY_OF_MONTH) == 1) {return true;}else{return false;}}public static void main(String[] args) {String time = "2022-06-18 16:01:30";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = null;try {date = sdf.parse(time);} catch (ParseException e) {e.printStackTrace();}boolean lastDayOfMonth = isLastDayOfMonth(date);System.out.println(lastDayOfMonth);}
}

SpringBoot 定时器每月最后一天执行解决方法相关推荐

  1. crontab每月最后一天执行

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴!  如 ...

  2. SpringBoot无法引入@RunWith注解解决方法

    SpringBoot无法引入@RunWith注解解决方法 1.首先检查是否添加好了Test的Starter依赖 <dependency><groupId>org.springf ...

  3. 定时任务每月最后一天执行

    关于Spring定时任务每月最后一天 corn表达式使用L 报错 可以使用如下解决办法: 首先,每月最后一天可能为(28,29,30,31)这几天只需要在这几天调度程序,在程序中判断是否为最后一天,如 ...

  4. JS异步加载,JQ事件不被执行解决方法

    一,在我们实现动态生成HTML代码时会出现,使用JQ方法会不被执行,解决方法,如下:使用jquery的委托事件,将该方法委托到页面已经存在的一个节点上 <!DOCTYPE html> &l ...

  5. SpringBoot 在启动时执行某些方法

    合理利用 SpringBoot 的 @PostConstruct .CommandLineRunner 或 ApplicationRunner: 某些场景下,需要在项目启动时就执行某些方法,例如:数据 ...

  6. springboot上传文件大小限制解决方法

    上传文件超过20MB之后会报错,如下: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException ...

  7. java getRuntime().exec 带符号的命令 无法执行 解决方法

    0x01 前言 首先Java下的命令执行大家都知道常见的两种方式: 1.使用ProcessBuilder ProcessBuilder pb=new ProcessBuilder(cmd); pb.s ...

  8. js中按钮去触发定时器,那么多次点击这个定时器会越来越快,解决方法

    并不是越来越快, 而是越来越多; $('button:first').click(function(){ // 记录ID var timerId = setInterval(function(){ c ...

  9. 基于Android中实现定时器的3种解决方法

    在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与线程的sleep(long)方法 二.采用Handler的postDelayed(Runnable, long)方法 三 ...

最新文章

  1. 论排列组合,持续更新
  2. 20、30、40岁年轻人,2020年的建议 转载
  3. jQuery 发送 AJAX 请求
  4. 简述Hadoop和Spark的异同
  5. linux c ip数据包,如何在Linux上的C / C ++中使用ipv6 udp套接字进行多播?
  6. ABB 机器人 通信指令(人机对话):
  7. Android Service使用需要注意事项
  8. Docker学习: 配置Docker阿里云的镜像加速器(图文)
  9. QGIS Server安装教程
  10. 手工修复Win 7下彩影ARP防火墙驱动程序(适用于32/64位系统)
  11. 美通社日历 | 媒体关注、会展信息、企业财报发布,节假日备忘(12月21日—12月27日)...
  12. Python批量提取Excel文件中所有单元格批注
  13. 清风数学建模学习笔记——熵权法(客观赋权法)
  14. 薇诺娜如何以创新战略在新消费浪潮中屹立不倒
  15. 微软OneDrive云盘5T大容量免费申请
  16. 海外社交媒体平台如何选择
  17. Windows搭建SMB服务
  18. 2.Linux下程序代码的编译
  19. QQ空间背景音乐 链接制作
  20. 《软件方法》第四章 自测题

热门文章

  1. yolo v5.50 坑
  2. 时间——时间到底是什么?
  3. 命运修造的几大定律(转载)
  4. RafyA PS合成作品欣赏(3)
  5. 服务器上需要虚拟内存吗,服务器需要设置虚拟内存吗
  6. 主要的七种排序(快排、希尔排序、堆排序、归并排序、选择排序、插入排序、冒泡排序)
  7. ON1 Portrait AI 2022 for Mac – 强大的照片AI智能处理软件
  8. 使用支付宝沙箱演示支付宝支付
  9. MySQL实战中,Insert语句的使用心得总结,差点挂在了美团三面
  10. SaaS模式的货车管理软件(java)