如何禁用石英负载平衡?

How to disable quartz load balancing?

我有这个调度程序:

<bean id="odilQuartzScheduler"
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
    lazy-init="false">
    <property name="jobFactory">
        <bean class="org.springframework.scheduling.quartz.SpringBeanJobFactory"/>
    </property>
    <property name="schedulerName" value="OdilScheduler"/>
    <property name="applicationContextSchedulerContextKey" value="applicationContext"/>
    <property name="autoStartup" value="${popo.scheduler}"/>
    <property name="startupDelay" value="60"/>
    <property name="overwriteExistingJobs" value="true"/>
    <property name="configLocation" value="classpath:quartz-odil.properties"/>
    <property name="transactionManager" ref="applicationTransactionManager"/>
    <property name="schedulerContextAsMap">
        <map>
            <entry key="globalConfiguration" value-ref="globalConfiguration"/>
            <entry key="odilFileImporter" value-ref="odilFileImporter"/>
            <entry key="odilRemoteDispatcher" value-ref="odilRemoteDispatcher"/>
            <entry key="odilService" value-ref="odilService"/>
            <entry key="centreReferenceService" value-ref="centreReferenceService"/>
            <entry key="envoiParserFactory" value-ref="envoiParserFactory"/>
            <entry key="versionReferenceService" value-ref="versionReferenceService"/>
            <entry key="delPublisherService" value-ref="delPublisherService"/>
            <entry key="capteurPublisherService" value-ref="capteurPublisherService"/>
        </map>
    </property>
    <property name="triggers">
        <list>
            <ref bean="piloteOdilTrigger-1"/>
            <ref bean="piloteOdilTrigger-2"/>
            <ref bean="piloteOdilTrigger-3"/>
            <ref bean="piloteOdilTrigger-4"/>
            <ref bean="piloteOdilTrigger-5"/>
            <ref bean="piloteOdilTrigger-6"/>
        </list>
    </property>
</bean>

<bean id="piloteOdilTrigger-1" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
    <property name="name" value="Trigger 1"/>
    <property name="jobDetail" ref="piloteOdilJobBean1"/>
    <property name="repeatInterval" value="60000"/>
    <property name="group" value="POPO"/>
</bean>
<bean id="piloteOdilTrigger-2" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="name" value="Trigger 2"/>
    <property name="jobDetail" ref="piloteOdilJobBean2"/>
    <property name="cronExpression" value="${popo.odil.rushhour.cronexpression}" />
    <property name="group" value="POPO"/>
</bean>
<bean id="piloteOdilTrigger-3" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="name" value="Trigger 3"/>
    <property name="jobDetail" ref="piloteOdilJobBean3"/>
    <property name="cronExpression" value="${popo.odil.rushhour.cronexpression}" />
    <property name="group" value="POPO"/>
</bean>
<bean id="piloteOdilTrigger-4" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="name" value="Trigger 4"/>
    <property name="jobDetail" ref="piloteOdilJobBean4"/>
    <property name="cronExpression" value="${popo.odil.rushhour.cronexpression}" />
    <property name="group" value="POPO"/>
</bean>
<bean id="piloteOdilTrigger-5" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="name" value="Trigger 5"/>
    <property name="jobDetail" ref="piloteOdilJobBean5"/>
    <property name="cronExpression" value="${popo.odil.rushhour.cronexpression}" />
    <property name="group" value="POPO"/>
</bean>
<bean id="piloteOdilTrigger-6" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="name" value="Trigger 6"/>
    <property name="jobDetail" ref="piloteOdilJobBean6"/>
    <property name="cronExpression" value="${popo.odil.rushhour.cronexpression}" />
    <property name="group" value="POPO"/>
</bean>

<bean id="piloteOdilJobBean-template" abstract="true"
    class="org.springframework.scheduling.quartz.JobDetailBean">
    <property name="name" value="Pilote ODIL"/>
    <property name="jobClass" value="fr.xxxx.popo.batch.PiloteOdilJob"/> <!-- implements StatefulJob -->
    <property name="requestsRecovery" value="true"/>
    <property name="group" value="POPO"/>
</bean>
<bean id="piloteOdilJobBean1" parent="piloteOdilJobBean-template" />
<bean id="piloteOdilJobBean2" parent="piloteOdilJobBean-template" />
<bean id="piloteOdilJobBean3" parent="piloteOdilJobBean-template" />
<bean id="piloteOdilJobBean4" parent="piloteOdilJobBean-template" />
<bean id="piloteOdilJobBean5" parent="piloteOdilJobBean-template" />
<bean id="piloteOdilJobBean6" parent="piloteOdilJobBean-template" />

这是它的配置文件

#============================================================================
# Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName = OdilScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false

#============================================================================
# ThreadPool
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 6
org.quartz.threadPool.threadPriority = 5

#============================================================================
# JobStore
#============================================================================
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.jobStore.misfireThreshold = 3

#============================================================================
# Plugins
#============================================================================
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true

根据我的理解,使用 ramJobStore 使其不可集群,因此负载平衡应该不起作用。

但实际上当我有 2 个服务器 运行 时,每个服务器都有自己的 OdilScheduler,每个都有 6 个触发器。 然而,总共只有 6 个触发器会同时工作。 例如,实例 1 上的 3 和实例 2 上的 3,我希望所有 12 个触发器同时工作。

我错过了什么?

谢谢

ps:石英版本:1.8.5

我被误导了,事实上我在每个实例上只尝试了 3 个触发器。 1 个正常和 2 个 cron 触发器。

cron 触发器使用 RAMJobStore,但由于模板的原因,每个触发器都有相同的名称,因此每个实例只能使用 1 个 cron 触发器(它们由它们的名称标识)。

这就是为什么看起来负载平衡正在发生,实际上发生的是因为它们具有相同的名称,每个实例只触发一个触发器。

如果我为每个实例设置 5 个 cron 触发器,那么每个实例将只有 1 个触发器。