首页 文章

spring boot cmd line cron expression java.lang.IllegalStateException

提问于
浏览
0

我的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作为init任务(/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 * * *

有任何想法吗?怎么了?

干杯,凯

2 回答

  • -1

    您正在传递 0 0 8 * * * as命令行参数,以便在Spring环境中获取它 . 但是,您的应用只获得第一个 0 作为变量值,因此有关所需6个部分的例外情况 . 改为用引号括起来:

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

    在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() {}
    }
    

相关问题