【问题标题】:Spring cron using @Scheduled annotation does not pick up the expression from property file使用 @Scheduled 注释的 Spring cron 不会从属性文件中获取表达式
【发布时间】:2020-03-20 15:38:50
【问题描述】:

我正在尝试从 @Scheduled annotation 的属性文件中读取 cron 表达式。

但是,当我启动服务器时,出现如下错误

Encountered invalid @Scheduled method 'scheduleServicePrincipalOrchestorJob': For input string: "'0

不确定这里发生了什么。

我的注释看起来像 -

@Scheduled(cron= "${abc.cronExpression}", zone="America/Los_Angeles")

我的 application.properties 看起来像

abc.cronExpression="0 8 0 0 0 0"

有什么线索说明出了什么问题?

【问题讨论】:

  • 删除属性文件中的"

标签: spring spring-boot cron spring-scheduled


【解决方案1】:

从 cron 表达式中删除引号。此外,有些字段不能为 0,因此请从这样的有效表达式开始并根据您的需要进行调整:

abc.cronExpression=0 0/5 * * * ?

也就是说,在第 0 秒,每 5 分钟,每天一次。

【讨论】:

    【解决方案2】:

    Spring 中使用@Scheduled 的cron 表达式由以下部分组成:

    <second> <minute> <hour> <day-of-month> <month> <day-of-week> <year>
    

    最后一部分&lt;year&gt; 是可选的。

    在您的示例中,您将 0 用于 &lt;day-of-month&gt;&lt;month&gt;,这是不可能的,因为它们不是从 0 而是从 1 开始的。

    您的 cron 可进行以下两项调整:

    bc.cronExpression=0 8 0 * * 0
    

    其中* 表示任何月份的任何一天。

    或者您可以使用以下方法仅在第一个月的第一天执行您的代码:

    bc.cronExpression=0 8 0 1 1 0
    

    如需更多信息,B​​ealdung 将great guide 与 cron 表达式放在一起,这可能有助于您进一步理解它。

    【讨论】:

      【解决方案3】:

      也许你可以参考一下。

      注解属性Scheduled.cron的值必须是常量表达式

      https://stackoverflow.com/a/16509088/4258006

      【讨论】:

        猜你喜欢
        • 2015-04-04
        • 2012-08-19
        • 2018-01-27
        • 2020-10-02
        • 2020-09-26
        • 2016-03-15
        • 2021-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多