【发布时间】: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