gpt4 book ai didi

java - 同步运行 Quartz 作业

转载 作者:行者123 更新时间:2023-11-30 07:49:18 25 4
gpt4 key购买 nike

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

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com