如何从 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
我想在几分钟内从 yml 中读取值,然后在调度程序中以毫秒为单位给出值
例如5分钟 5 * 60 * 1000
@Scheduled(fixedDelayString = "${jobintervalmins} * 60 * 1000") 我试过这样,但没有用
我收到错误消息:无效的 fixedDelayString 值“5 * 60 * 1000”- 无法解析为 long
属性文件将包含 jobintervalmins: 5
您不能特别让它将该值解释为分钟,但您可以将其解析为 Duration
。使用 this code:
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