spring 引导命令行 cron 表达式 java.lang.IllegalStateException

spring boot cmd line cron expression java.lang.IllegalStateException

我对我的 Spring Boot 驱动的 Web 应用程序有异议。我试图从命令行覆盖 @Scheduled cron 表达式,但 spring 以 java.lang.IllegalStateException.

响应
Initialization of bean failed; 
nested exception is java.lang.IllegalStateException: 
Encountered invalid @Scheduled method 'work': 
Cron expression must consist of 6 fields (found 1 in "0")

我有一个带有预定注释的 Spring 组件:

@Scheduled(cron="${myapp.cron}")
public void work() {
    ...
}

有一个这样的 application.properties 文件:

myapp.cron=0 0 1 * * *

我正在将应用程序与 Maven 捆绑到一个 jar 文件中。该应用程序在 ubuntu 机器上运行,Java 8 作为初始化任务 (/etc/init/myapp.conf)。

description "My app"

start on runlevel [2345]
stop on runlevel [!2345]
respawn
respawn limit 10 5

setuid <USER>
setgid <GROUP>

script
    java -Xms2G -Xmx2G -jar /opt/myapp.jar \
         --server.port=4014 \
         --server.address=127.0.0.1 
         --logging.file=/opt/myapp.log \
         --logging.level.root=INFO
end script

到目前为止一切都很好。添加以下行会出现上述异常。

--myapp.cron=0 0 8 * * *

有什么想法吗?怎么了?

干杯, 凯

凯,

您将 0 0 8 * * * 作为命令行参数传递,以便在 Spring 环境中获取它。但是,您的应用仅获取第一个 0 作为变量值,因此所需的 6 个部分除外。用引号将值括起来:

--myapp.cron="0 0 8 * * *"

在 src/main/resouce 文件夹下创建一个 xyz.properties 文件。

cron.open.status.mgr.schedule=10 15 0 15 * ?

并执行如下操作

@Component
public class OpenStatusManagerScheduler {

    @Scheduled(cron = "${open.status.mgr.schedule}")
    public void scheduleStatusTaskWithCronExpression() {}
}