如何解决yml中的Cronjob Quartz格式
我有那个条目的application.yml:
cron:
scheduler:
expr: 0 0/60 * * * ?
当我尝试在Quarkus调度程序中注入属性时,收到消息:
IllegalArgumentExpression: Cron expression contains 1 parts but we expect one of [6,7]
我尝试的每个示例都会收到此消息,但我无法解决问题。
甚至:
expr: "0 0/60 * * * ?"
没用。
@Scheduled(cron = "{cron.scheduler.expr}")
void cronJobWithExpressionInConfig() {
counter.incrementAndGet();
System.out.println("Cron expression configured in application.yml");
}
我很乐意提供建议。
解决方法
根据this,注释中的值正确,但是如果您查看updating-the-application-configuration-file段,则指南使用的是文件application.properties
。
由于您使用的是YAML文件,因此我怀疑您没有包含所需的依赖项(已测试版本1.9.0.Final
和1.9.2.Final
):
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-config-yaml</artifactId>
<version>1.9.2.Final</version>
</dependency>
与Spring相反,必须在pom.xm文件中明确列出此依赖项。
此外,我将以这种方式更改YAML文件:
cron:
scheduler:
expr: "0 0/60 * * * ?"
Disclamer :我无法复制您的错误。提供的详细信息还不够。
已编辑
请注意,cron表达式本身是可疑的……“ 0/60”没有意义。这是指定cron作业发生的时间的分钟部分,例如'0/40'表示希望在每小时的0分钟和40分钟(例如00:00)执行该作业, 00:40,...,14:00,14:40,... 23:00和23:40。
所以您的表情说要在不存在的XX:00和XX:60执行作业。
如果您在分钟行中签入Cron Trigger Tutorial的官方文档,则它会明确指出接受的值在[0-59]
范围内示例
请注意以下(工作) java类:
package com.acme.scheduled;
import io.quarkus.scheduler.Scheduled;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.TimeUnit;
public class ScheduledActions {
private static final Logger LOGGER = LoggerFactory.getLogger(ScheduledActions.class);
private static final int lengthFrame = 120;
private static final int lengthText = lengthFrame - 4;
private static final String FRAME = StringUtils.repeat('*',lengthFrame);
private void printFancyText(final String text) {
final String centeredText;
if(text.length() > lengthText ) {
centeredText = StringUtils.abbreviate(text,"...",lengthText);
} else if ( text.length() == lengthText) {
centeredText = text;
} else {
centeredText = StringUtils.center(text,lengthText);
}
LOGGER.info(FRAME);
LOGGER.info("* {} *",centeredText);
LOGGER.info(FRAME);
}
@Scheduled(cron = "{cron.scheduler.expr}")
public void cronExpressionTrigger(){
this.printFancyText("Firing from statically defined cron expression. Triggering method 'cronExpressionTrigger'.");
}
@Scheduled(delay = 5,delayUnit = TimeUnit.SECONDS,every = "PT15S")
public void delayTrigger() {
this.printFancyText("Firing from delay express in seconds. Triggering method 'delayTrigger'.");
}
@Scheduled(every = "30s")
public void periodicTrigger(){
this.printFancyText("Firing from statically defined period. Triggering method 'periodicTrigger'.");
}
}
cron表达式的值来自application.yml文件,其定义如下:
cron:
scheduler:
expr: "0 0/1 * * * ?" # This works like a charm,with or without the '@' - I prefer with.
# expr: "0 0/60 * * * ?" >>> This does NOT work. It fails with error: java.lang.IllegalArgumentException: Period 60 not in range [0,59]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。