spring boot cmd line cron expression java.lang.IllegalStateException

时间:2017-02-07 07:53:01

标签: spring-boot spring-scheduled

我的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 * * *

有什么想法吗?怎么了?

干杯, 启

2 个答案:

答案 0 :(得分:0)

启,

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

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

答案 1 :(得分:-1)

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

@Component
public class OpenStatusManagerScheduler {

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

并执行以下操作

private void loadImageFromStorage(String path)
{

try {
    File f=new File(path, "profile.jpg");
    Bitmap b = BitmapFactory.decodeStream(new FileInputStream(f));
        ImageView img=(ImageView)findViewById(R.id.imgPicker);
    img.setImageBitmap(b);
} 
catch (FileNotFoundException e) 
{
    e.printStackTrace();
}