繁体   English   中英

同步运行Quartz作业

[英]Run Quartz job synchronous

我有一种情况,我不知道该如何处理。

我有一个quartz工作,应该开始另一个嵌套工作,并获得嵌套工作的一些结果并进行处理。

据我所知, quartz是异步运行的。 因此,启动嵌套作业的线程不能等到传递嵌套作业的结果。

这里有什么解决方案?

首先,石英有一个用于运行其作业的线程池。 您可以在这里阅读有关内容:

另外请记住,石英甚至可以以分布式方式运行作业。 它允许在“主动-主动”服务器群集中运行,在这种情况下,您无法假设可以触发作业的服务器。 因此,按照jbh所述实现单例可能很棘手(至少现在已经警告您了:))

总的来说,我认为石英应做其有益的工作。 我认为在此基础上实现任何复杂的逻辑都不是一个好主意。 根据您的问题,我了解到您正在尝试运行另一个作业(例如,作业A运行作业B)。 如果您为A和B分配了不同的触发器,那么这是有道理的(否则为什么B应该实现为石英作业?)。 因此,也许您可​​以重构作业B的代码,以便在与石英无关的某个类(例如C类)中实现在B中执行的逻辑? 在这种情况下,您可以为作业A和B分配不同的触发器,但是在内部仅执行类C中的代码?

示例(您的方法):

class A implements Job {
  public void execute(JobExecutionContext context) throws JobExecutionException {
      // do A's stuff
      // call Job B somehow (???)
  }
}


class B implements Job {
  public void execute(JobExecutionContext context) throws JobExecutionException {
      // do something
  }

}

我的建议:

class C {
   doSomeLogic(...) {...}
}


class A implements Job {
         public void execute(JobExecutionContext context) throws   JobExecutionException {
        // do A's stuff
        C c = new C();
        c.execute();  
  }


class B implements Job {
         public void execute(JobExecutionContext context) throws JobExecutionException {            
        C c = new C();
        c.execute();  
  }

}

希望这可以帮助。

几种方法。 您可以创建一些Static / Singleton类型的类,其中包含某种信号量/会话变量。 检查此信号量时(同步线程安全性)使主作业循环。 然后类似地检索数据。

您也可以以类似方式使用JobDataMap。 JobDataMap示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM