微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 yml 文件中读取 fixedDelayMinutes 并在 spring-boot

如何解决如何从 yml 文件中读取 fixedDelayMinutes 并在 spring-boot

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

例如5分钟 5 * 60 * 1000

@Scheduled(fixedDelayString = "${jobintervalmins} * 60 * 1000") 我试过这样,但它不起作用

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

属性文件将包含 工作间隔: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) 将其转换为 long。例如,5 分钟的值可以表示为 PT5M

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

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

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

jobinterval: 30000

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

jobinterval: PT5M
jobinternal: PT300S

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。