开发者社区> 问答> 正文

Spring 定时器每月最后一天语法报错?报错

在SPring定时器 中想在每月最后一天23:50进行一个定时器,但是网上找到 的语法貌似有问题:

	@Scheduled(cron = "0 50 23 L * ?")
	public void clearDocumentMonthReader() {
		documentDao.clearweekAndMonthReader();
		logger.info("清空周阅读量和月阅读量");
	}

运行我的web程序报如下错误:

Caused by: java.lang.IllegalStateException: Encountered invalid @Scheduled method 'clearDocumentMonthReader': For input string: "L"
	at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor$1.doWith(ScheduledAnnotationBeanPostProcessor.java:219)
	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:473)
	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:451)
	at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.postProcessAfterInitialization(ScheduledAnnotationBeanPostProcessor.java:109)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:412)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1494)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524)
	... 34 more

请问这个语法真的不支持 吗?我是用的是Spring 3

展开
收起
爱吃鱼的程序员 2020-06-08 16:36:59 964 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    估计是Spring版本的问题了,没用过Spring的Scheduled不敢确定。给几个解决办法:

    1、改用Spring quartz做定时任务,也要注意找Spring对应的quartz版本,quartz是支持你那种写法的。

    2、改调度时间,改为每个月1号0点执行,效果差不多吧?

    3、升级Spring,因为没用过Spring Scheduled也不能提供具体哪个版本可以。

    楼主尝试下吧。

    回复 @码上中国博客:用quartz直接用你写的那个cron就行了还麻烦给提供一个cron命令

    spring的cron表达式并非与Quartz完全一样,API中没说明DayOfMonth域支持LWC

    http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html

    回复 @码上中国博客:表达式写成"00028-31**",然后在方法内再代码判断是否最后一天cron如何实现我想要的功能

    打开spring-context3.2.5包中的org.springframework.scheduling.support.CronSequenceGenerator类的源码可以看到类注释上有这么一句话:Datesequencegeneratorfora<a>Crontab"rel="nofollow">http://www.manpagez.com/man/5/crontab/">Crontabpattern</a>,我们打开网址,查看里面的说明文档发现,并没有说明它支持 L 这个表达式。

    楼主如果非要这么写,可以试试用quartz

    不那么写也行啊,麻烦给提供一个能够实现我想要的每月最后一天的格式呗。

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

    @Scheduled(cron="0592328-31*?")publicvoidexecute(){finalCalendarc=Calendar.getInstance();if(c.get(Calendar.DATE)==c.getActualMaximum(Calendar.DATE)){//是最后一天System.out.println("重置密码错误次数!");}}

     

    2020-06-08 16:37:19
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多