如何使用spring&;控制quartz调度器运行;weblogic部署计划

如何使用spring&;控制quartz调度器运行;weblogic部署计划,spring,quartz-scheduler,weblogic12c,Spring,Quartz Scheduler,Weblogic12c,我有一个配置了spring的quartz调度程序,它有五个触发器 这将触发适当的工作。我要找的是有国旗 可以用来禁用开发和测试环境中的作业,以及 在生产中启用。下面是我的配置 石英调度器的applicationContext.xml 群集调度程序 自动的 60000 org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.impl.jdbcjobstore.oracle.weblogic.WebLogicOracleDelegate qrtz_ 真

我有一个配置了spring的quartz调度程序,它有五个触发器 这将触发适当的工作。我要找的是有国旗 可以用来禁用开发和测试环境中的作业,以及 在生产中启用。下面是我的配置 石英调度器的applicationContext.xml


群集调度程序
自动的
60000
org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.impl.jdbcjobstore.oracle.weblogic.WebLogicOracleDelegate
qrtz_
真的
20000
org.quartz.siml.SimpleThreadPool
7.
5.
Cron触发器:


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


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

如果以上是不可行的,您有几个选项:

  • 使用schedulerBean为各个环境分离(部分)Spring上下文。dev/test的上下文将包含空的作业/触发器列表。然后,您可以使用Spring概要文件根据您能想到的任何条件(例如,如果您使用.devel/.test/*.prod,则使用域后缀、一些配置值、JVM sys属性等)来选择适用的上下文

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

  • 实现TriggerListener,并使其vetoJobExecution对于dev/test始终返回true,对于prod始终返回false


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

    感谢jan的回复。我是quartz调度的新手,据我所知,调度程序是基于CRON触发器启动的。我已经尝试了选项3,我要寻找的是一个启用或禁用调度程序的标志。我应该能够做到这一点,而无需进行任何代码更改或进行新的部署。您实际如何启动调度程序?我问,因为您有autoStart=false,这意味着除非您在其他地方启动调度程序,否则不应该启动它?我认为您可以简单地使用SpringPropertyPlaceHolderConfigure,为各个环境加载不同的属性文件,然后使用:。quartz.autoStart可以是JVM系统属性,也可以是位于PropertyPlaceHolderConfigure加载的属性文件中的属性//来自spring文档setAutoStart:设置初始化后是否自动启动计划程序。默认值为“true”;将此设置为“false”以允许手动启动。我将手动启动解释为配置触发器以启动调度程序在特定时间运行。我可能错了Rohith不不是这样的。触发器不会启动计划程序在特定时间运行。触发器用于启动作业。调度程序是一个正在运行(触发器启动作业)、暂停(触发器暂停且不启动作业)或停止(调度程序内部未发生任何事件,从未触发任何作业)的组件。问题已解决:感谢您的说明,我的应用程序在servletcontextlistener类中启动调度程序,我在其中创建了一个标志,它被weblogic部署计划覆盖。
     <!-- ====================================================================== -->
                <!-- ========================== 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>
    
    <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>