目前,我有一个基于Java 7,tomcat 7和Spring 4的Web应用程序,它在tomcat启动时调用一个线程。 这个线程总是活着的,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();
}
}
}
}
}
}
外部事件使用Object的ID填充队列。 使用一个tomcat这个线程运行良好,但现在我需要添加另一个tomcat,所以我想在集群模式下引入Quartz。 我已经在我的项目中配置了Quartz,它似乎可以工作,但现在我怎么能翻译&#34;这个类使用Quartz?我希望只有一个线程是活动的,因为它对我的数据库来说非常昂贵。
提前致谢
答案 0 :(得分:0)
一般情况下,Quartz在集群模式下运行时可确保仅在一台服务器上触发(和处理)作业。
因此Job将成为您执行的任务(换句话说,应该执行)
现在,Quartz还引入了Trigger的概念,它基本上定义何时将触发作业。
在您的代码段中,每隔30000毫秒= 30秒运行一次作业。所以你每隔30秒就会触发你的东西(SimpleTrigger会完成这项工作)。
因此,'while'循环消失,它将由石英自动处理。 在工作中,你只能使用队列。目前还不清楚是谁填补了这个队列,但它看起来像是一个不同的问题。
很难确切地说你如何翻译队列,但一般来说应该
就是这样
最后但并非最不重要的是,spring与Quartz完美融合 请参阅第33.6章Here
希望这有帮助