当前位置: 首页 > 知识库问答 >
问题:

如何使用spring控制quartz调度程序运行

姜建德
2023-03-14

我有一个配置了spring的quartz调度器,它有五个触发器来触发适当的作业。我想要的是有一个标志,我可以用来禁用开发和测试环境中的作业,并在生产中启用。下面是我的applicationContext中的配置。石英调度器的xml。

 <!-- ====================================================================== -->
            <!-- ========================== QUARTZ SCHEDULER ========================== -->
            <!-- ====================================================================== --> 
            <bean id="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false">
             <property name="applicationContextSchedulerContextKey" value="applicationContext" />
                <property name="autoStartup" value="false" />
                <property name="dataSource" ref="dataSource"/>
                <property name="transactionManager" ref="transactionManager"/>
                <property name="overwriteExistingJobs" value="true"/>
                <property name="waitForJobsToCompleteOnShutdown" value="true"/>
                <property name="triggers">
                    <list>
                        <!-- if you remove a trigger, make sure you
                            also remove the trigger 
                            from the QRTZ_TRIGGERS table. 
                        -->
                        <ref bean="Trigger1" />
                        <ref bean="Trigger2" />
                        <ref bean="Trigger3" />
                        <ref bean="Trigger4"/>
                        <ref bean="Trigger5"/>
                    </list>
                </property>
                <property name="quartzProperties">
                    <props>
                        <prop key="org.quartz.scheduler.instanceName">ClusteredScheduler</prop>
                        <prop key="org.quartz.scheduler.instanceId">AUTO</prop>
                        <prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
                        <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
                        <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.oracle.weblogic.WebLogicOracleDelegate</prop>
                        <prop key="org.quartz.jobStore.tablePrefix">qrtz_</prop>
                        <prop key="org.quartz.jobStore.isClustered">true</prop>
                        <prop key="org.quartz.jobStore.clusterCheckinInterval">20000</prop>
                        <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
                        <!-- Set to 7 to correspond to the 7 nightly jobs that run in the morning -->
                        <prop key="org.quartz.threadPool.threadCount">7</prop>
                        <prop key="org.quartz.threadPool.threadPriority">5</prop>
                    </props>
              </property>
            </bean>

Cron触发器:

<bean id="Trigger1" class="org.springframework.scheduling.quartz.CronTriggerBean" scope="prototype">
        <property name="jobDetail">
            <bean name="nightlyJob" class="org.springframework.scheduling.quartz.JobDetailBean">
                <property name="jobClass" value="My custom class that extends QuartzJobBean"/>
                <property name="group" value="nightly"/>
                <property name="requestsRecovery" value="true" />
            </bean>
        </property>
        <!-- Cron expression to run job every 10 minutes for testing -->
        <!-- <property name="cronExpression" value="0 0/10 * * * ?"/> -->
        <!-- Cron expression that runs at 2:10AM -->
        <property name="cronExpression" value="0 10 2 * * ?"/>
    </bean>

我尝试的内容:我尝试将cron表达式设置为feb31,这样它就永远不会运行,但这需要在数据库中运行代码更改或脚本。我需要的是:在我的weblogic部署计划中需要一个标志来打开或关闭quartz调度器

共有1个答案

长孙鸿振
2023-03-14

如果需要防止触发所有作业,那么在已配置的环境中(即在开发/测试中使用AutoStart=false,在prod中使用AutoStart=true),不能让调度程序处于停止状态吗?实际上,我并不清楚如何在prod上启动调度程序,因为您似乎已经有了autoStart=false。

如果以上是不可行的,你有几个选择:

>

实现SchedulerListener并使其schedulerStarted方法暂停整个计划程序,或暂停开发/测试上的所有作业组。

实现一个TriggerListener,并使其vetoJobExecution对于dev/test总是返回true,对于prod总是返回false。

顺便说一句:如果您想要一个可视化工具来帮助您暂停/取消暂停调度程序、作业和触发器等,请查看QuartzDesk。免责声明:我是这个工具的主要开发者。

 类似资料:
  • 我有使用Spring的石英作业实现。我的调度程序工作正常,作业执行完美。我的问题是如何将此调度程序置于待机状态?这样一旦我决定将调度程序置于待机模式,就不会触发任何作业。下面是作业类 来自applicationContext_调度程序的代码片段。xml

  • 问题内容: 我计划使用Quartz调度程序,因为我阅读了很多好的意见。 我的问题如下:在任何给定时间,系统中都会存在成千上万的触发器。大多数触发器将仅触发一个事件并死亡。另外,很有可能我将不得不在分配许多作业后取消它们(基于新的输入)。 石英可以缩放吗?推荐哪个JobStore?我计划在mysql上使用JDBC。 附加信息 :我的工作将发送电子邮件或通过HTTP发布将数据发布到其他服务(通过WAN

  • 相关: 我觉得我错过了什么?

  • 如果这个问题太幼稚,我很抱歉,我希望作业被安排成一个一个地执行,而不是并行地执行,它只执行一次。 在文档中,@disallowConcurrentExecution是 null PS:我不知道会安排哪些工作。因此,如果作业已经在运行,我需要一些方法来动态链接作业。

  • 我有这个春靴应用程序。使用Quartz(一个功能丰富的开源作业调度库,几乎可以集成在任何Java应用程序中)在每月10日执行作业 在配置包中: 请参考一下,我有另一个类似的应用程序,没有,而且工作正常:

  • 例如,我想编写一个Java程序,在每天上午12点打印“Hello World”,如何使用Quartz调度器实现这一点? 这样地?我应该把打印“hello world”方法放在哪里?