gpt4 book ai didi

java - quartz ,调度过程始终存在

转载 作者:行者123 更新时间:2023-11-28 23:25:46 24 4
gpt4 key购买 nike

目前,我有一个基于 Java 7、tomcat 7 和 Spring 4 的 Web 应用程序,它在 tomcat 启动时调用一个线程。该线程始终处于 Activity 状态,java 代码为:

public class Scheduler {
Queue<Long> queue = new ArrayBlockingQueue<Long>();
private static class ThreadExecutor implements Runnable
{
.......
@Override
public void run()
{
while(true)
{
Long ID = queue.get();
if(ID != null)
{
Object o = webFacade.get(ID);
//Exec....
}
else
{
try
{
Thread.sleep(30000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
}
}

外部事件用对象的 ID 填充队列。对于一个 tomcat,这个线程运行良好,但现在我需要添加另一个 tomcat,所以我想在集群模式下引入 Quartz。我在我的项目中配置了 Quartz,它似乎可以工作,但现在我如何使用 Quartz“翻译”这个类?我希望只有一个线程处于 Activity 状态,因为它对我的数据库来说非常昂贵。

提前致谢

最佳答案

一般来说,在集群模式下运行的 Quartz 保证作业只会在一台服务器上触发(和处理)。

因此 Job 将是您执行的任务(换句话说,应该执行什么)。

现在 Quartz 还引入了 Trigger 的概念,它基本上定义了作业将被触发的时间

根据您的代码片段,您每 30000 毫秒 = 30 秒运行一次作业。因此,您将每 30 秒触发一次您的东西(SimpleTrigger 将完成这项工作)。

因此,'while' 循环消失了,它将由 quartz 自动处理。在工作中,您只会使用队列。不清楚谁填满了这个队列,但这看起来像是一个不同的问题。

很难准确地说出你是如何翻译队列的,但一般来说工作应该

  1. 从队列中获取
  2. 像现在一样调用 webFacade

就是这样。最后但并非最不重要的是,Spring 与 Quartz 完美集成。参见 Chapter 33.6 .

关于java - quartz ,调度过程始终存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37297327/

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