有没有人尝试在多台计算机中并行启动Quartz作业应用程序?
我在我的应用程序中创建了Quartz集群作业,它在多台计算机中运行。石英工作良好,当我开始应用程序顺序,在所有主机一个接一个。然而,当我并行启动应用程序时,我会得到一些不同类型的错误。
例如:
>
作业和触发器注册失败:null org.quartz.objectalreadyexistsexception:无法存储名称为“Trigger name”且组为“job_group”的触发器,因为已存在具有此标识的触发器
ORA-02292:违反完整性约束(QUARTZ_CRON_TRIG_TO_TRIG_FK)-找到子记录
有人遇到过这个问题并得到解决吗?能否请您分享一下您对这个话题的想法?
这个问题出现了,因为我创建了带有以下属性的SchedulerFactoryBean。
--SchedulerFactoryBean.SetOverWirteExistingJobs(true)
并行启动所有实例时,所有实例都试图删除Quartz_JOB_DETAILS和Quartz_TRIGGERS表值。从而导致上述错误。
但是,一旦我使用默认值“overwriteexisitingjobs is false”。这个问题已经消失了。
我面临的唯一问题是,每次如果我改变cron触发器值,我已经从DB中删除了作业信息,并且它将在启动第一个调度程序实例时重新创建。
delete from QRTZ_CRON_TRIGGERS;
delete from QRTZ_TRIGGERS;
delete from QRTZ_JOB_DETAILS;
delete from QRTZ_LOCKS;
commit;
我有一个使用Quartz1.6.6的Java应用程序。它被部署到Weblogic上,Weblogic的体系结构包括两个应用服务器。 令人困惑的是,我有另一个Java应用程序,其中包含了Quartz调度,它似乎运行得非常愉快。另一个应用程序有一个相同的机制,每分钟触发一个触发器,从日志中我可以看到该作业每60秒只运行一次。 昨天下午作业已运行的次数示例: 15:10:46,984 15:10:49,
我有在集群中运行,并且我得到定期运行的作业。该作业在一台计算机中启动,其他计算机将保持到下一个执行时间。 我现在想要的是,如果前一次调用还没有完成,则延迟作业调用。例如: 即使这样也是可以接受的: 我使用了类似触发器的cron表达式,它每10分钟触发一次()。
我正在尝试使用Quartz来调度运行在GlassFish上的web应用程序中的作业。我在用RamjobStore。问题是,有时调度的作业没有被执行,即使它是在过去或将来被调度的。作业数量非常少,排定程序上一直排定的作业总数不到20个,同时保证最多运行1个作业,所以我假设线程计数不是问题,我可以将它设置为ThreadCount1,它仍然可以工作。在servlet被销毁之前,调度程序也不会被关闭。那么
我的we应用程序A将扫描业务相关的数据库表,并在启动期间和之后每10分钟安排石英作业。如果我在两个不同的tomcat实例上部署两个A应用程序,那么将有两组通过Quartz调度的重复作业。 我该如何解决这个问题?我是否需要将调度作业的部分代码提取到单独的应用程序中,并确保只部署了1个实例,从而只调度了1组作业?但是问题变成了--如果这个实例失败了怎么办?在这种情况下,如何实现故障转移?
目标:*使三节点集群每10分钟运行一次Job1,同一集群每5分钟运行一次Job2。每个作业生成一封电子邮件;所以在10:55AM我应该只收到一封来自集群的Job2电子邮件,在11:00AM我应该收到一封来自集群的Job1电子邮件和一封来自集群的Job2电子邮件,在11:05AM我应该只收到一封来自集群的Job2电子邮件,依此类推... 问题:*Job1每10分钟在集群中的每个节点上运行多次,对于J
我有一个有两个节点的集群,它连接到同一个数据库,还有一个调度作业,由Quartz调度程序每10分钟启动一次。在quartz.properties中设置。 我感兴趣的是,调度程序是否会为同一节点发出作业,直到每隔10分钟可到达该节点为止,或者它使用某种算法来确定哪个节点将执行该作业。 我在文档(http://www.quartz-scheduler.org/documentation/quartz-