Java SpringQuartz调度程序服务要求仅在单个节点上运行,而不是在所有节点上运行
有一个SpringWeb应用程序——Yevi。Yevi部署在具有6个节点的集群环境中。使用共享Yevi部署包的所有节点。应用程序在applicationContext.xml中具有以下配置:Java SpringQuartz调度程序服务要求仅在单个节点上运行,而不是在所有节点上运行,java,spring,quartz-scheduler,Java,Spring,Quartz Scheduler,有一个SpringWeb应用程序——Yevi。Yevi部署在具有6个节点的集群环境中。使用共享Yevi部署包的所有节点。应用程序在applicationContext.xml中具有以下配置: <bean id="cronYeviTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="YeviJob"/>
<bean id="cronYeviTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="YeviJob"/>
<!-- run every morning at 6 AM -->
<property name="cronExpression" value="0 0 6 * * ?"/>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="YeviTrigger"/>
</list>
</property>
<property name="configLocation" value="classpath:quartz.properties"/>
</bean>
而且,quartz.properties现在什么都没有。上面的CRON作业设计为每天早上6点运行,执行一些业务操作,并在业务操作完成后返回睡眠。并且,在同一时间再次醒来并执行相同的业务操作
我认为,这个问题与集群环境有关。一旦所有节点启动并运行。创建6个CRON作业-每个节点上一个,desire业务操作执行6次,而不是一天一次
我认为,必须有某种配置才能在单个节点上运行一次,而不是在所有节点上运行一次。我需要它在早上6点只在一个节点上运行这个CRON作业,如果该节点完成了故障转移,它应该检查下一个节点并在那里运行CRON作业
谢谢 使用JDBC JobStore,只需一个节点就可以实现触发器触发 编辑 集群目前仅适用于JDBC Jobstore(JobStoreTX或JobStoreCMT),其基本工作原理是让集群的每个节点共享同一个数据库 负载平衡会自动发生,集群的每个节点都会尽快启动作业。当触发器的触发时间发生时,获取触发器的第一个节点(通过在触发器上放置锁)就是将触发触发器的节点 每次触发时,只有一个节点将触发作业。我的意思是,如果作业有一个重复触发器,告诉它每10秒触发一次,那么在12:00:00时,正好有一个节点将运行作业,在12:00:10时,正好有一个节点将运行作业,等等。每次不一定是同一个节点-运行它的节点或多或少是随机的。对于繁忙的调度程序(很多触发器),负载平衡机制几乎是随机的,但对于非繁忙(例如,很少触发器)的调度程序,负载平衡机制更倾向于使用同一节点 请点击此链接: