我不确定您是否知道这一点,但是,所有工作都是jobkey唯一的。
让我们开始对这个答案的公约
JOB - 这意味着一个石英工作
工作 - 石英作业类
正如我前面提到可以有只有一个作业的一个实例。发生这种情况的是,每个作业由一个作业键定义,现在作业键始终是唯一的
这意味着通常您在JOB和作业之间有一对一的映射,即预定作业(Quartz作业和类实现接口作业
这是JOB - >作业
CASE 1
作业的
多个实例和工作不是多个实例
将看起来像
JOB A - > Job |
作业B - >招聘| ...........多个作业运行同一类
作业C - >招聘|
只要保持在同一jobgroup不同jobkey让你工作的多个实例加载到您的调度
看一看JobFactory因为
一个的JobFactory负责生产工作的情况下,类。
..
CASE 2
现在来作业的实例。根据您的日程安排和JOB的执行时间,可能会有多个并发运行的实例(将其称为多个实例更好的术语将是并发执行是不恰当的)。为了避免你将不得不编写一些自定义逻辑。 或使用注释DisallowConcurrentExecution。
加载具有DisallowConcurrentExecution的CASE 1中所示的Job的5个实例。但这将意味着5个不必要的事例,尽管在某个时候可能不需要这项工作。
CASE 3
现在让我们来考虑设置初始化为1.自定义逻辑可以帮助处理这个
开始之前,你工作的标志。您可以检查该标志是否小于5.如果小于5则进入主业务逻辑并增加标志值。在块出来之前执行结束后递减它。这样,即使您有多个JOB正在运行,也不会执行业务逻辑。
private static int jobRunningFlag = 0;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
if(JobName.jobRunningFlag <= 5)
{
JobName.jobRunningFlag++
.....execute this piece of code....
JobName.jobRunningFlag--
}
}
显然jobRunningFlag将存储在同一个作业类的静态变量
PS: 更多的答案,这将根据您的意见。你看过JobFactory和相关的类/接口吗?你有什么尝试。我的想法是这将完全落实到你的实现逻辑上。我对石英不太了解,对他们没有太多的想法。
我的情况是许多石英工作JOB单一工作(Quartz类)塞纳里奥。 工作(石英工作) - >工作(石英班) 多对一 我已经把我所有的“Applier”班放在同一组里。 我也把触发器放在同一组中。 我尝试使用JobListner进行控制,但Quartz的“调度程序”类的“pauseJob”不适用于仅执行一次执行的计划的JOB。 我无法找到任何可以“暂停”特定组执行的机制。 我也检查“JobFactory”,但它在我的情况下也没有用。 – Hitesh