Java 春季使用Quartz的顺序作业调度

Java 春季使用Quartz的顺序作业调度,java,spring,spring-mvc,quartz-scheduler,Java,Spring,Spring Mvc,Quartz Scheduler,春季使用Quartz的顺序作业调度 我有三个或更多的作业,这取决于它们各自以前的作业,它们将按顺序运行。如果作业1完成作业2运行,当作业2完成作业3运行。如果上一个作业中发生任何错误,则不会触发下一个触发的作业。我试着用quartz了解工作链,但没能通过 作业顺序如下所示 Job 1 -> Job 2 -> Job 3 <beans ...> <bean name="scheduler1" class="org.springfram

春季使用Quartz的顺序作业调度

我有三个或更多的作业,这取决于它们各自以前的作业,它们将按顺序运行。如果
作业1
完成
作业2
运行,当
作业2
完成
作业3
运行。如果上一个
作业
中发生任何错误,则不会触发下一个触发的作业。我试着用quartz了解工作链,但没能通过

作业顺序如下所示

Job 1 -> Job 2 -> Job 3
<beans ...>
    <bean name="scheduler1"
            class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
                <property name="jobClass"
                    value="com.abc.xyz.schedular.Scheduler1" />
                <property name="durability" value="true" />
            </bean>
            <bean id="trigger1"
            class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
                <property name="jobDetail" ref="scheduler1" />
                <property name="cronExpression" value="${scheduler1.cronExpression}" />
            </bean>
          <bean name="scheduler2"
            class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
                <property name="jobClass"
                    value="com.abc.xyz.schedular.Scheduler2" />
                <property name="durability" value="true" />
            </bean>
            <bean id="trigger2"
            class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
                <property name="jobDetail" ref="scheduler2" />
                <property name="cronExpression" value="${scheduler2.cronExpression}" />
            </bean>
            <bean name="scheduler3"
            class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
                <property name="jobClass"
                    value="com.abc.xyz.schedular.Scheduler3" />
                <property name="durability" value="true" />
            </bean>
            <bean id="trigger3"
            class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
                <property name="jobDetail" ref="scheduler3" />
                <property name="cronExpression" value="${scheduler3.cronExpression}" />
            </bean>
        <bean name="jobScheduler"
            class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                <list>
                    <ref bean="trigger1" />
                    <ref bean="trigger2" />
                    <ref bean="trigger3" />
                </list>
            </property>
            <property name="autoStartup" value="${jobScheduler.autoStartup}" />
        </bean>
</beans>
我们在quartz.xml中定义了它们各自的bean,如下所示

Job 1 -> Job 2 -> Job 3
<beans ...>
    <bean name="scheduler1"
            class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
                <property name="jobClass"
                    value="com.abc.xyz.schedular.Scheduler1" />
                <property name="durability" value="true" />
            </bean>
            <bean id="trigger1"
            class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
                <property name="jobDetail" ref="scheduler1" />
                <property name="cronExpression" value="${scheduler1.cronExpression}" />
            </bean>
          <bean name="scheduler2"
            class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
                <property name="jobClass"
                    value="com.abc.xyz.schedular.Scheduler2" />
                <property name="durability" value="true" />
            </bean>
            <bean id="trigger2"
            class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
                <property name="jobDetail" ref="scheduler2" />
                <property name="cronExpression" value="${scheduler2.cronExpression}" />
            </bean>
            <bean name="scheduler3"
            class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
                <property name="jobClass"
                    value="com.abc.xyz.schedular.Scheduler3" />
                <property name="durability" value="true" />
            </bean>
            <bean id="trigger3"
            class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
                <property name="jobDetail" ref="scheduler3" />
                <property name="cronExpression" value="${scheduler3.cronExpression}" />
            </bean>
        <bean name="jobScheduler"
            class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                <list>
                    <ref bean="trigger1" />
                    <ref bean="trigger2" />
                    <ref bean="trigger3" />
                </list>
            </property>
            <property name="autoStartup" value="${jobScheduler.autoStartup}" />
        </bean>
</beans>
现在,我如何能够使用上述配置链接作业,因为有时这些繁重的过程需要超过1分钟,所以在上一个作业完成之前,我不想启动下一个fire作业。 如果您有任何问题/澄清,请回复我


提前感谢。

要链接作业的执行,您需要实施一个。在它的事件处理程序中,您需要定义作业链接逻辑,以便按照顺序执行作业,而不管执行单个作业需要多长时间。在这种情况下,您只需要第一个作业(作业1)的触发器,因为链接作业(作业2和作业3)将从事件处理程序“手动”触发

您还可以使用使您能够在应用程序中以编程方式定义简单作业链的实现。要定义作业链,您将使用以下方法

如果您想要一个健壮的解决方案,允许您在应用程序代码中避免对作业链逻辑进行硬编码,同时允许您通过GUI在运行时修改您的作业链接规则,而不需要触摸、重新部署和重新启动应用程序,您可以考虑使用我们的产品。QuartzDesk附带了一个功能强大的作业链接引擎,允许您实现各种常见的作业链接场景,包括链接(目标)作业的计划(即非即时)执行、多个目标作业、本地/远程目标作业等


要链接作业的执行,您需要实施一个。在它的事件处理程序中,您需要定义作业链接逻辑,以便按照顺序执行作业,而不管执行单个作业需要多长时间。在这种情况下,您只需要第一个作业(作业1)的触发器,因为链接作业(作业2和作业3)将从事件处理程序“手动”触发

您还可以使用使您能够在应用程序中以编程方式定义简单作业链的实现。要定义作业链,您将使用以下方法

如果您想要一个健壮的解决方案,允许您在应用程序代码中避免对作业链逻辑进行硬编码,同时允许您通过GUI在运行时修改您的作业链接规则,而不需要触摸、重新部署和重新启动应用程序,您可以考虑使用我们的产品。QuartzDesk附带了一个功能强大的作业链接引擎,允许您实现各种常见的作业链接场景,包括链接(目标)作业的计划(即非即时)执行、多个目标作业、本地/远程目标作业等


如果您想按顺序运行它们,为什么不将它们全部放在同一个
作业中
?正如@heeneee所说的,或者如果您的作业计数是可配置的和/或随时间变化的,您可能需要在作业上使用一些发布-订阅层,这甚至可以让您在运行时更改链配置。您好@Heeneee和Maks,感谢您的回复,我可以将它们放入我当前正在执行的单个作业中,但我希望在项目中配置作业链,这就是我提出此问题的原因。如果您希望按顺序运行它们,你为什么不把它们都放在同一个
作业中
?正如@heeneee所说的,或者如果你的作业数是可配置的和/或随时间变化的,你可能需要在作业上使用一些发布-订阅层,这甚至可以让你在运行时更改链配置。嗨@heeneee和Maks,谢谢你的回复,我可以将它们放在我目前正在做的单个作业中,但我想在项目中配置作业链,这就是我提出这个问题的原因。