如何从 yaml 文件中读取固定的延迟分钟数并在 spring-boot 中安排作业

How to read fixedDelayMinutes from yml file and shedule the job in spring-boot

我想在几分钟内从 yml 中读取值,然后在调度程序中以毫秒为单位给出值

例如5分钟 5 * 60 * 1000

@Scheduled(fixedDelayString = "${jobintervalmins} * 60 * 1000") 我试过这样,但没有用

我收到错误消息:无效的 fixedDelayString 值“5 * 60 * 1000”- 无法解析为 long

属性文件将包含 jobintervalmins: 5

您不能特别让它将该值解释为分钟,但您可以将其解析为 Duration。使用 this code:

将字符串值解析为 long
private static long parseDelayAsLong(String value) throws RuntimeException {
    if (value.length() > 1 && (isP(value.charAt(0)) || isP(value.charAt(1)))) {
        return Duration.parse(value).toMillis();
    }
    return Long.parseLong(value);
}

如果该值的第一个或第二个字符是 P,它将使用 Duration.parse(value) 变成长整数。例如,5 分钟的值可以表示为 PT5M.

您可以将注释配置为使用 ${jobinterval}:

@Scheduled(fixedDelayString = "${jobinterval}")

然后您可以在您的 yaml 文件中指定一个将用作毫秒的数值:

jobinterval: 30000

或者您可以使用您想要的任何单位指定持续时间的纹理表示:

jobinterval: PT5M
jobinternal: PT300S