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

码上中国博客 发布于 2017/03/06 14:56
阅读 1K+
收藏 0

在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

加载中
0
学而不思则罔
学而不思则罔

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

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

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

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

楼主尝试下吧。

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

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

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

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

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

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

码上中国博客
码上中国博客
不那么写也行啊,麻烦给提供一个能够实现我想要的每月最后一天的格式呗。
返回顶部
顶部