java - 如何配置 Quartz 来处理周期、周期和间隔

标签 java quartz-scheduler jobs

我正在为我的 Java 后端编写一个监视器,需要能够在不同时间监视不同的事物(内存、CPU、用户 Activity 、负载等)。最重要的是,我需要能够将每个监视器(MemoryMonitorJobCpuMonitorJobActivityMonitorJob 等)配置为具有以下特征:

  • 定期开启/关闭(例如每 15 分钟一次)
  • 配置开机后保持多长时间(例如,2 分钟)
  • 因此,我想将 MemoryMonitorJob 配置为每 15 分钟启动一次,持续 2 分钟,然后关闭...但没有那 2 分钟间隔抵消下一次运行的时间!

因此,在此特定示例下,监视器将表现出以下行为:

  1. t = 0,开启
  2. 0 < t < 2,运行
  3. t = 2,关闭
  4. t = 15,开启
  5. 15 < t < 17,跑
  6. t = 17, 关闭
  7. t = 30,开启
  8. ...

显然,在配置代码的某处,我需要检查“interval”是否满足或超过“period/cycle”时间,否则我们将有一个作业在它仍在运行时尝试启动!

我相信 Quartz Scheduler是这里工作的正确工具,但我过去只用它来设置简单的 cron 作业(“每 15 分钟运行 X”)。这个间隔属性让我失望,在仔细查看 Quartz CronTriggerImpl 文档后,我似乎无法弄清楚如何配置 Quartz 作业以实现这样的行为。

理想情况下,如果 Quartz 可以处理这种行为,那么我只需使用正确的周期/间隔设置配置 1 个监视器 Job 实现,然后将它们添加到调度程序。

Quartz 可以处理这个吗?如果是这样,如何(我可以看一个例子吗?!?)?如果没有,我在这里有什么选择?提前致谢!

最佳答案

实际上,Quartz 触发器完全按照您想要的方式工作:

Trigger trigger = newTrigger()
    .withSchedule(simpleSchedule()
        .withIntervalInMinutes(15)
        .repeatForever())
    .forJob(memoryMonitorJob)
    .build();

这将每 15 分钟触发一次 MemoryMonitorJob,无论您的作业运行多长时间。当然,让你的作业类保持运行两分钟( hibernate 、循环等)取决于你。

如果您的作业运行时间超过 15 分钟,您有两个选择:

  • 默认情况下,Quartz 将再次触发相同的作业,与之前的执行重叠。
  • 如果您的作业是有状态的,Quartz 将不会再次触发作业,等待前一个作业完成。

关于java - 如何配置 Quartz 来处理周期、周期和间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12543896/

相关文章:

Java 8更新91插件连接获取所有类

java - 如何使用空的ArrayList创建构造函数?

java - Quartz Cron 表达式问题

c# - 使用 Quartz .NET 和 AdoJobStore 调度通用 IJob<>

php - 为每个 MySQL 行运行 PHP 脚本

c# - 使用 IJobParallelFor 的 System.InedxOutOfRangeException

java - 单链表java

java - java类可以在nsis脚本中运行吗?

java - 确保 Spring Quartz 作业执行不重叠

java - 如何避免出现这样的情况呢?