Java 如何配置Quartz以处理周期、周期和间隔
我正在为我的Java后端编写一个监视器,需要能够在不同的时间监视不同的东西(内存、CPU、用户活动、负载等)。最重要的是,我需要能够配置每个监视器(Java 如何配置Quartz以处理周期、周期和间隔,java,quartz-scheduler,jobs,Java,Quartz Scheduler,Jobs,我正在为我的Java后端编写一个监视器,需要能够在不同的时间监视不同的东西(内存、CPU、用户活动、负载等)。最重要的是,我需要能够配置每个监视器(MemoryMonitorJob,CpuMonitorJob,ActivityMonitorJob,等等),使其具有以下特征: 定期打开/关闭(如每15分钟一次) 配置开机后的开机时间(例如,2分钟) 因此,我想将MemoryMonitorJob配置为每15分钟启动一次,持续2分钟,然后关闭…,但这2分钟的间隔不会抵消下次运行之前的时间 因此,在
MemoryMonitorJob
,CpuMonitorJob
,ActivityMonitorJob
,等等),使其具有以下特征:
- 定期打开/关闭(如每15分钟一次)
- 配置开机后的开机时间(例如,2分钟)
- 因此,我想将
配置为每15分钟启动一次,持续2分钟,然后关闭…,但这2分钟的间隔不会抵消下次运行之前的时间强>MemoryMonitorJob
CronTriggerImpl
文档之后,我似乎不知道如何将Quartz作业配置为这样
trigger = newTrigger()
.withIdentity("trigger", "group")
.withSchedule(cronSchedule("* 15,16 * * * ?"))
.build();
理想情况下,如果Quartz能够处理这种行为,那么我只需配置1个监视器作业实现,并使用正确的周期/间隔设置,然后将它们添加到调度器中
石英能处理吗?如果是,如何(我可以看到一个例子?!?)?如果没有,我的选择是什么?提前谢谢 我认为这里有几个选项,但最简单的方法是使用CronTrigger每15分钟运行一次作业,而不是跟踪作业中的2分钟
职务代码
public void execute(JobExecutionContext context) throws JobExecutionException {
Date now = new Date();
Date inTwoMinutes = new Date(now.getTime() + 2*60*1000);
while(inTwoMinutes.before(now)) {
// do something
now = new Date();
}
}
调度代码
job = newJob(MyJob.class)
.withIdentity("job", "group")
.build();
trigger = newTrigger()
.withIdentity("trigger", "group")
.withSchedule(cronSchedule("0 15 * * * ?"))
.build();
sched.scheduleJob(job, trigger);
这将每15分钟触发一次作业
另一种选择是在15分钟和16分钟内每秒触发同一个作业。在这种情况下,您不需要while循环。然而,不利的一面是很难在工作之间保持一个状态。触发器看起来是这样的
trigger = newTrigger()
.withIdentity("trigger", "group")
.withSchedule(cronSchedule("* 15,16 * * * ?"))
.build();
有关触发器的详细信息:
实际上,石英触发器的工作方式正是您想要的:
Trigger trigger = newTrigger()
.withSchedule(simpleSchedule()
.withIntervalInMinutes(15)
.repeatForever())
.forJob(memoryMonitorJob)
.build();
无论您的作业运行多长时间,它都会准确地每隔15分钟触发一次MemoryMonitorJob
。当然,让你的作业课持续两分钟(睡觉、循环等)取决于你
如果作业运行时间超过15分钟,则有两个选项:
- 默认情况下,Quartz将再次触发相同的作业,与上一次执行重叠
- 如果您的作业是有状态的,Quartz将不会再次触发作业,等待前一个作业完成
您能定义一下“开启”是什么意思吗?你的意思是,它将是一个可以运行2分钟以上的作业,还是它将重复做同样的事情2分钟?好的一点:-)通过“打开”,代码流将进入一个“无限”,而(真){…}
循环,并继续重复做同样的事情,直到“间隔”(即2分钟)结束。对不起,我没有澄清!