【问题标题】:Does Parent-Child jobs concept exist in Quartz.netQuartz.net中是否存在亲子工作概念
【发布时间】:2016-08-26 06:48:05
【问题描述】:

我正在使用 Quartz.net 调度程序将数据从一个数据库迁移到另一个数据库。我想为每个数据库表数据传输启动一个单独的工作。我有一个用于数据迁移的父作业,它会触发每个表的子作业。我希望父作业等待其所有子作业完成,但是现在当我开始父作业时,它会触发所有继续运行的子作业,但一旦触发所有作业,父作业就会完成。 提前谢谢..

示例代码如下

 public class DataMigrationJob : IJob
   {
    public void Execute(IJobExecutionContext context)
    {

        List<string> tableList  = somelist;
        foreach (var table in tableList)
        {
           JobDetailImpl job = new JobDetailImpl(jobKey, groupName, tableJobType,    true, true);
        if (!SchedulerProvider.Scheduler.CheckExists(job.Key))
        {
            context.Scheduler.AddJob(job, true, true);
        }
        context.Scheduler.TriggerJob(job.Key);
        }
    }             
}      

是否有适当的方法让父作业继续运行,直到所有子作业完成?

我有一个想法通过使用 while 循环来使其工作,该循环将在条件中调用一个函数并添加等待,如下所示

    public boolena AllChildrenJobCompleted(IJobExecutionContext context,             List<JobKey> jobKeys)        
    {
      runningJobsList = context.Scheduler.GetCurrentlyExecutingJobs();
      //check if children jobs are part of this list
      //return false until list contains any of the child job
      //return true when list does not contain child jobs
    }

稍后可以像这样在父作业的执行函数中调用此函数

      while(!AllChildrenJobCompleted(context,childJobs))
         {wait(1000);}

不确定这是否是最佳实践。

【问题讨论】:

    标签: c# quartz-scheduler quartz.net


    【解决方案1】:

    为什么您需要童工?您可以简单地创建一个作业,创建一组异步Tasks,运行它们并等待所有提供的 Task 对象完成执行。

    quartz-documentation 称,目前没有“直接”或“免费”的方式来使用 Quartz 链接触发器,但有几种方法可以轻松完成:

    • 一种方法是使用侦听器(即 TriggerListener、JobListener 或 SchedulerListener),它可以注意到作业/触发器的完成,然后立即安排新的触发器触发。这种方法可能会涉及一些问题,因为您必须通知侦听器执行哪个作业 - 您可能需要担心此信息的持久性。请参阅 Quartz 附带的侦听器 org.quartz.listeners.JobChainingJobListener - 因为它已经具有一些此功能。

    • 另一种方法是构建一个 Job,在其 JobDataMap 中包含要触发的下一个作业的名称,并在作业完成时(其 execute() 方法的最后一步)让作业安排下一个作业。

    【讨论】:

    • 感谢您的输入,实际上我想在石英 UI 中显示子作业的状态。如果其中一个子作业失败,我应该能够从 UI 重新触发它。每个子作业都是独立的工作,并且需要父作业,因为我需要一个可以一次触发所有子作业的单点。
    猜你喜欢
    • 2016-09-15
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2015-01-04
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多