Java 如何更改群集作业的计划?

Java 如何更改群集作业的计划?,java,spring,quartz-scheduler,Java,Spring,Quartz Scheduler,就我所尝试的而言,我必须手动更改DB中的CRON_触发器表。肮脏的 有没有办法做得更像这样 有两个应用程序正在运行,它们的.properties文件调度都定义为“每分钟”,因此工作正常 我停止一个实例并重新配置(在.properties文件中更改),因此计划是“每小时” 我启动实例。现在,我想让Instance检查一下,这样的作业是否已经在DB中定义,并在DB中更新计划。现在使用站点中的配置不会发生这种情况 或者典型的解决方案是什么 所以我猜当你说.properties文件时,实际上是指Spri

就我所尝试的而言,我必须手动更改DB中的CRON_触发器表。肮脏的

有没有办法做得更像这样

  • 有两个应用程序正在运行,它们的.properties文件调度都定义为“每分钟”,因此工作正常
  • 我停止一个实例并重新配置(在.properties文件中更改),因此计划是“每小时”
  • 我启动实例。现在,我想让Instance检查一下,这样的作业是否已经在DB中定义,并在DB中更新计划。现在使用站点中的配置不会发生这种情况
  • 或者典型的解决方案是什么

  • 所以我猜当你说.properties文件时,实际上是指SpringbeanXML文件
  • 静态配置具有不同计划的相同作业没有任何意义。如果出于任何原因,一个实例重新启动,它将自动应用自己的计划。如果静态配置,那么所有实例上的作业触发器都应该相同
  • 如果在
    SchedulerFactoryBean
    中正确设置
    ,它将自动更新作业的日程安排
  • 永远不要手动修改数据库。始终通过其API更新计划程序
  • 试试这样的东西:

    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="jobDetails">
                <list>
                    <ref bean="yourJobDetail" />
                </list>
            </property>
            <property name="triggers">
                <list>
                    <ref bean="yourJobTrigger" />
                </list>
            </property>
            <property name="configLocation" value="file:${HOME}/yourProperties.properties" />
            <!-- Commented, because don't work with autocommit = false on spring data source -->
            <!-- <property name="dataSource" ref="mainDataSource"/> -->
            <property name="transactionManager" ref="mainTransactionManager" />
            <property name="autoStartup" value="true" />
            <property name="applicationContextSchedulerContextKey" value="applicationContext" />
            <property name="jobFactory">
                <bean class="FactoryForJobWithInjectionOfSpringBbean" />
            </property>
            <!-- Will update database cron triggers to what is in this jobs file on each deploy. Replaces all previous trigger and job data that 
                was in the database. YMMV -->
            <!-- dont work properly with cluster -->
            <!-- <property name="overwriteExistingJobs" value="true" /> -->
        </bean>
    
    
    
    不幸的是,我认为:

    <property name="overwriteExistingJobs" value="true" />
    
    
    

    在群集模式下无法正常工作

    嗨,纪尧姆,1:正确;他说:这是改变日程安排的最简单方法。用新设置重新启动两个应用程序(但不是同时启动!)听起来很容易;3:我希望它会有帮助,但我得到了“org.quartz.JobPersistenceException:新触发器与旧触发器的作业不相关。”在应用程序重新启动时。。。4:很清楚;好的,通过在SpringXML中命名JobDetailFactoryBean修复了这个问题,谢谢您的帮助,看起来它现在可以工作了!我在您的代码中没有看到任何会导致集群中cron重新配置的内容。真的有用吗?你能解释一下,为什么覆盖现有的工作不好吗?我不知道为什么。也许我应该补充一句:的确,这个解决方案也可能有帮助: