java - 同步运行 Quartz 作业

标签 java quartz-scheduler

我遇到了一种情况,我不知道该如何处理。

我在 quartz 中有一份工作,它应该启动另一个嵌套作业并获取嵌套作业的一些结果并处理它们。

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

这里的解决方案是什么?

最佳答案

首先,quartz 有一个用于运行其作业的线程池。 您可以阅读here :

此外请记住,quartz 即使以分布式方式也可以运行作业。它允许在“主动-主动”服务器集群中运行,在这种情况下,您无法对可以触发作业的服务器做任何假设。因此,像 jbh 所说的那样实现单例可能会很棘手(至少你现在已经被警告了:))

总的来说,我认为quartz应该发挥它的优势——运行作业。 我认为在此基础上实现任何复杂的逻辑不是一个好主意。 从您的问题中我了解到您正在尝试从另一项作业运行一项作业(假设作业 A 运行作业 B)。如果您为 A 和 B 分配了不同的触发器,这是有意义的(否则为什么 B 应该实现为 quartz 作业?)。那么也许你可以重构作业 B 的代码,以便 B 中执行的逻辑将在与quartz 无关的某个类(比如 C 类)中实现?在这种情况下,您可以为作业 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();  
  }

}

希望这有帮助。

关于java - 同步运行 Quartz 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33492860/

相关文章:

Java:OTF字体的使用,检查特定字体是否存在

java - 多个通用类型

java - GraphView 垂直标签从 0 开始以整数递增

java - 在 Quartz 和 Apache Camel 中使用计时器

java - 集群环境下quartz可以在不同节点之间共享同一个JOB吗?

java - 在ja中创建JAR文件

java - 嵌套的 If/Else 语句

eclipse - Spring 3.2 + Quartz 2.1.7 问题

java - 如何在 Java Swing 应用程序中安排任务?

java - 为 Tomcat 上的 Webapp 安排任务