java - 如何将日程安排更改为每天的某个时间而不是每隔 X 时间

标签 java jakarta-ee schedule

我试图让任务每天早上 8 点执行(示例)。

目前我所做的是创建一个任务,自动执行它,但只执行一段时间(在本例中为 50 秒),我希望它每天早上 8 点执行。

我当前的代码:

    Timer time = new Timer(); 
    certif_envia_notificacion st = new certif_envia_notificacion(); 
    time.schedule(st, 0, 50000);

其中 certif_envia_notificacion 是我想要执行的任务,它每 50 秒执行一次。

目前我能解决这个问题的唯一方法是在任务 certif_envia_notificacion 中询问时间并在上午 8 点执行,但这似乎是对服务器资源的巨大浪费,因为我必须至少执行该任务 24 次日。

提前致谢。

最佳答案

这是我想到的一种黑客解决方案,但请随意根据您的要求提供评论/反馈。

基本上,根据我的理解,您有一个 Java 程序,它会在计算机启动(如果重新启动)时自动运行,然后每小时检查一次,看看是否是运行该应用程序的正确时间。为什么不保持这种方式运行,而是计算到达下一个所需时间(例如第二天晚上 8 点)所需的时间,而不是每小时运行一次。

例如,假设您在下午 3:15 重新启动它。 java程序运行时,获取当前时间(System.currentTimeMil...)然后计算到达晚上8点需要的时间。您可以对此进行一些简单的数学计算(例如,20 - 当前时间 = 需要等待的时间),如果为负数,只需将 24 添加到(例如,如果是 20 - 23,则答案为 24 - 3 = 21,因此等待下一个晚上 8 点 21 小时)。

每次运行代码或启动时都可以使用此过程。我建议只创建一个简单的函数来计算所需的 sleep 时间。

关于java - 如何将日程安排更改为每天的某个时间而不是每隔 X 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32379886/

相关文章:

java - springboot 生成的 JSON 中缺少名称标签

java - 如何将显卡处理器用于某些线程?

java - 为什么我们在 Comparable 实现中的 CompareTo 中使用 `this`?

dojo - 创建交互式事件调度程序

linux - 可抢占式 Linux 内核中的调度程序或某些关键内核线程是否可以被抢占?

java - 鱿鱼:MaximumInheritanceDepth on Android

maven - Maven Web 项目中 JSP、JavaScript、CSS、图像的常规位置是什么?

java - 每个优秀的 Java/Java EE 开发人员都应该能够回答的问题?

java - 服务器-客户端不一致的结果

python - Python `schedule` 计划任务的返回值去了哪里?