【问题标题】:ScheduleExpression between exact hours and minutes精确小时和分钟之间的 ScheduleExpression
【发布时间】:2021-12-12 03:39:36
【问题描述】:

我正在使用 javax.ejb.ScheduleExpression 和计时器来创建每日计划作业。我需要用小时和分钟指定工作时间。例如,假设我希望它运行“每天18:27-19:47之间”。我该怎么写这个表达式?

我已经尝试如下;

ScheduleExpression()
            .hour("18"-"19")
            .minute("27"-"47")
            .second("*")

但问题是,当我运行它时,它会在 18:47 停止并在 19:27 重新开始。那么,我怎样才能让它在这些小时和分钟之间每秒运行一次呢?

另外,我希望能够在任何时候停止计时器,我正在使用“timer.cancel();”方法,然后再次将其重新安排到相同的时间,但这次是第二天。是否有可能编写一个表达式,该表达式将在第二天开始运行并在指定时间继续运行,直到它再次被取消?

【问题讨论】:

    标签: java timer ejb scheduling


    【解决方案1】:

    我认为ScheduleExpression 的用途不是这样,而且您对如何定义表达式也有疑问。

    ScheduleExpression()
                .hour(18-19)
                .minute(27-47)
                .second("*")
    

    首先,规范.hour(18-19) 计算为.hour(-1),而.minute(27-47) 等价于.minute(-20),两者均无效。

    所以我假设你的意思是(注意引号):

    ScheduleExpression()
                .hour("18-19")
                .minute("27-47")
                .second("*")
    

    Timer“过期”(即火灾)的点基于ScheduleExpression。你的表情意味着无论何时

    • 小时是 18 或 19
    • 分钟是 27 到 47 之间的任意值
    • 每秒

    所以你会在

    18:27:00
    18:27:01
    18:27:02
    ...
    18:47:58
    18:47:59
    then nothing until
    19:27:00
    19:27:01
    ...
    19:47:58
    19:47:59
    

    您没有提供足够的细节来理解您的意图,但我认为这与您想要的不符。

    【讨论】:

    • 是的,我忘了加上引号。所以,不可能用 ScheduleExpression 得到我想要的。你有什么建议可以代替它吗?
    • 您需要澄清您要完成的工作。词组“每天18:27-19:47之间”是模棱两可的。是吗“每天在 18:27 到 19:47 之间的某个随机时间运行一次”?如果不是,那你到底是什么意思?
    • 我真正想要的是; “在 18:27 和 19:47 之间每秒运行一次”,这适用于每一天。所以一周 7 天,它会从 18:27 开始,到 19:47 结束。在此期间,该方法将每秒执行一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多