【问题标题】:.Net Quartz Windows Service resolve job dependencies.Net Quartz Windows 服务解决作业依赖关系
【发布时间】:2015-11-14 08:02:43
【问题描述】:

我刚刚开始使用 Quartz.Net - 基本上我想将它作为 Windows 服务运行并使用 IJob 接口安排不同程序集中的作业。 默认情况下,我需要将包含作业(及其所有依赖项)的程序集与 Quartz.exe 一起放在根文件夹中。一切都好 - 我已经完成了这项工作。 但是,我想将来自不同程序集的不同作业放入根目录下的特定文件夹中。当我这样做时,Quartz 无法解决依赖关系——我意识到我可以创建自己的程序集解析器,但是我不知道把它放在哪里或者应该实例化它——任何帮助都会很棒。

我尝试创建自己的 JobFactory 并根据提供的路径解决其中的依赖项。但是它不起作用 - 由于某种原因 JobFactory 失败,因为它找不到 Job 依赖项 - 这令人费解,因为 Job 仅在 JobFactory.NewJob 方法中创建,如下所示:

  public class MyQuartzJobFactory : IJobFactory

{ //这行是否因为找不到依赖项而失败 私有静态只读 ILog log = LogManager.GetLogger(typeof(MyQuartzJobFactory));

public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
  IJobDetail jobDetail = bundle.JobDetail;
  Type jobType = jobDetail.JobType;
  try
  {
    if (log.IsDebugEnabled)
    {
      log.Debug(string.Format(CultureInfo.InvariantCulture, "Producing instance of Job '{0}', class={1}", jobDetail.Key, jobType.FullName));
    }

    string path = "";
    if (jobDetail.JobDataMap.ContainsKey("custPath"))
    {
      path = jobDetail.JobDataMap["custPath"].ToString();
    }

    return ObjectUtils.InstantiateType<IJob>(jobType);
  }
  catch (Exception e)
  {
    SchedulerException se = new SchedulerException(string.Format(CultureInfo.InvariantCulture, "Problem instantiating class '{0}'", jobDetail.JobType.FullName), e);
    throw se;
  }
}

/// <summary>
/// Allows the job factory to destroy/cleanup the job if needed. 
/// No-op when using SimpleJobFactory.
/// </summary>
public void ReturnJob(IJob job)
{
  var disposable = job as IDisposable;
  if (disposable != null)
  {
    disposable.Dispose();
  }
}

}

【问题讨论】:

  • 我觉得你需要定义自己的JobFactory,stackoverflow.com/questions/20587433/…
  • 不,我试过了,但它不起作用——由于某种原因,他 JobFactory 失败,因为它找不到 Job 依赖项——这令人费解,因为 Job 仅在 JobFactory.NewJob 方法中创建。

标签: .net quartz-scheduler quartz.net


【解决方案1】:

如果您在可执行文件所在的文件夹中有程序集,则在配置文件中使用probing element 可能更容易。或者,看看server example 是如何安装服务并创建您自己的服务来设置您的程序集依赖项的。

【讨论】:

  • 我正在创建自己的服务器,就像您引用的服务器示例一样 - 我只是不确定我应该在哪里解决已加载的已配置(使用 quartz_jobs.xml 配置)作业的依赖关系。探测元素看起来很有趣 - 但是不同程序集中的不同作业可能使用相同依赖项的不同版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多