Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringQuartz调度程序服务要求仅在单个节点上运行,而不是在所有节点上运行_Java_Spring_Quartz Scheduler - Fatal编程技术网

Java SpringQuartz调度程序服务要求仅在单个节点上运行,而不是在所有节点上运行

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"/>

有一个SpringWeb应用程序——Yevi。Yevi部署在具有6个节点的集群环境中。使用共享Yevi部署包的所有节点。应用程序在applicationContext.xml中具有以下配置:

<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时,正好有一个节点将运行作业,等等。每次不一定是同一个节点-运行它的节点或多或少是随机的。对于繁忙的调度程序(很多触发器),负载平衡机制几乎是随机的,但对于非繁忙(例如,很少触发器)的调度程序,负载平衡机制更倾向于使用同一节点

请点击此链接: