SpringBoot 定时器每月最后一天执行解决方法
在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 定时器每月最后一天执行解决方法相关推荐
- crontab每月最后一天执行
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 如 ...
- SpringBoot无法引入@RunWith注解解决方法
SpringBoot无法引入@RunWith注解解决方法 1.首先检查是否添加好了Test的Starter依赖 <dependency><groupId>org.springf ...
- 定时任务每月最后一天执行
关于Spring定时任务每月最后一天 corn表达式使用L 报错 可以使用如下解决办法: 首先,每月最后一天可能为(28,29,30,31)这几天只需要在这几天调度程序,在程序中判断是否为最后一天,如 ...
- JS异步加载,JQ事件不被执行解决方法
一,在我们实现动态生成HTML代码时会出现,使用JQ方法会不被执行,解决方法,如下:使用jquery的委托事件,将该方法委托到页面已经存在的一个节点上 <!DOCTYPE html> &l ...
- SpringBoot 在启动时执行某些方法
合理利用 SpringBoot 的 @PostConstruct .CommandLineRunner 或 ApplicationRunner: 某些场景下,需要在项目启动时就执行某些方法,例如:数据 ...
- springboot上传文件大小限制解决方法
上传文件超过20MB之后会报错,如下: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException ...
- java getRuntime().exec 带符号的命令 无法执行 解决方法
0x01 前言 首先Java下的命令执行大家都知道常见的两种方式: 1.使用ProcessBuilder ProcessBuilder pb=new ProcessBuilder(cmd); pb.s ...
- js中按钮去触发定时器,那么多次点击这个定时器会越来越快,解决方法
并不是越来越快, 而是越来越多; $('button:first').click(function(){ // 记录ID var timerId = setInterval(function(){ c ...
- 基于Android中实现定时器的3种解决方法
在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与线程的sleep(long)方法 二.采用Handler的postDelayed(Runnable, long)方法 三 ...
最新文章
- 论排列组合,持续更新
- 20、30、40岁年轻人,2020年的建议 转载
- jQuery 发送 AJAX 请求
- 简述Hadoop和Spark的异同
- linux c ip数据包,如何在Linux上的C / C ++中使用ipv6 udp套接字进行多播?
- ABB 机器人 通信指令(人机对话):
- Android Service使用需要注意事项
- Docker学习: 配置Docker阿里云的镜像加速器(图文)
- QGIS Server安装教程
- 手工修复Win 7下彩影ARP防火墙驱动程序(适用于32/64位系统)
- 美通社日历 | 媒体关注、会展信息、企业财报发布,节假日备忘(12月21日—12月27日)...
- Python批量提取Excel文件中所有单元格批注
- 清风数学建模学习笔记——熵权法(客观赋权法)
- 薇诺娜如何以创新战略在新消费浪潮中屹立不倒
- 微软OneDrive云盘5T大容量免费申请
- 海外社交媒体平台如何选择
- Windows搭建SMB服务
- 2.Linux下程序代码的编译
- QQ空间背景音乐 链接制作
- 《软件方法》第四章 自测题