3

谁能解释一下lockAtLeastFor和lockAtMostFor中定义的时间。什么是PT1M45S,它可以接受哪些其他参数。

  @Scheduled(cron = "0 0/2 * * * *")
  @SchedulerLock(name = "TaskScheduler_scheduledTask", lockAtLeastFor = "PT1M45S", lockAtMostFor = "PT2M")
  public void performJob()
  {
     System.out.println("executed");
  }
4

4 回答 4

9

那就是ISO-8601 持续时间格式P代表期间并且(可选)后跟以年 ( Y)、月 ( M)、周 ( W) 和天 ( ) 为单位的持续时间DT代表时间,后跟小时 ( H)、分钟 ( M) 和(小数)秒 ( ) 中的一个或多个S

另请参见Duration.parse. Java 支持的持续时间格式不支持Y,MWISO-8601 中指定的,而是使用简化的格式,如PnDTnHnMn.nS.

于 2020-04-28T10:06:04.780 回答
1

这是持续时间的 ISO 8601 格式

看来您正在使用ShedLock。根据文档,它可以接受以毫秒为单位的持续时间。

/** * 锁将至少持有 X 毫秒。如果您确实需要在给定的时间段内最多执行一次任务,可以使用它。如果任务的持续时间短于节点之间的时钟差,则任务理论上可以执行多次(一个接一个节点)。通过设置此参数,您可以确保 * 锁将至少保留给定的时间段。*/

long lockAtLeastFor() 默认-1;

于 2020-04-28T10:04:18.087 回答
0

该文档指出:

可以是带有后缀的时间,如 10s 或 ISO8601 持续时间,如 {@link java.time.Duration#parse(CharSequence)} 中所述,例如 PT30S。

于 2020-04-28T10:05:21.547 回答
0

它在 ShedLock 文档中指定

持续时间规范

  • 持续时间+单位 - 1s、5ms、5m、1d(自 4.0.0 起)
  • 持续时间(毫秒) - 100(仅限 Spring 集成)
  • ISO-8601 - PT15M(参见 Duration.parse() 文档)

https://github.com/lukas-krecan/ShedLock#duration-specification

于 2020-04-28T11:12:26.253 回答