我在我的Sping Boot 应用程序中使用Spring Schedular。我已经在属性文件中定义了cron表达式:
batch.delete-job.cron=0 0 0 * * *
我在用@Scheduled Annotation注解的方法中使用此值,如下所示:
@Scheduled(cron = "${batch.delete-job.cron}")
public void doBatchJob() {
}
我不断收到错误消息:
遇到无效的@Scheduled 方法“doBatchJob”:Cron表达式必须包含6个字段(在“${batch.delete-job.cron}”中找到1个)
如果我在注解中直接使用cron表达式,那么它就可以工作。
4条答案
按热度按时间nmpmafwu1#
将此添加到您的应用程序上下文-
如果这样做不成功,请尝试删除两个位置(您的代码和应用程序属性)中的连字符,并以分隔。例如-${batch.delete.job.cron}
s8vozzvw2#
从属性名称中删除连字符并没有什么不同,但我还是这样做了。解决问题的方法是将以下引用属性文件的注解放在包含doBatchJob()方法的类上。工作解决方案如下所示:
ippsafx73#
CRON是一个广泛使用的特性,但它的缺点之一是可读性差。如果一个非程序员需要设置一个定义调度的属性,这将是一项具有挑战性的任务。想象一下,如果你可以写这样的东西:
@Scheduled(fixedRate = 9h)
,用于每9小时调度一次作业(或将“9h”移到属性文件中)。我自己写了一个特性,可以让你做到这一点。请看here的解释。这个特性可以在MgntUtis开源库中找到。这个库可以作为Maven artifact或Git找到。使用这个特性需要编写比使用注解多一点的代码,但是提供了一种用户友好的格式。lx0bsm1f4#
对于那些使用
application.yml
首先将cron属性设置到应用程序.yml文件中。
然后,它可以与作为cron值的Scheduled参数一起使用。
例如:
而不是:
您可以用途: