【问题标题】:Quartz scheduler. Schedule job during asp.net application start石英调度器。在 asp.net 应用程序启动期间安排作业
【发布时间】:2015-10-13 06:47:58
【问题描述】:

我想在应用程序启动期间使用任务调度程序来创建线程。 感谢thisthis,我做到了,但是出了点问题,作业没有运行,当然之前初始化了。

我的课在开始之前运行:

[assembly: WebActivatorEx.PreApplicationStartMethod(
typeof(Application.App_Start.TaskScheduler), "Start")]
namespace Application.App_Start
{
    public static class TaskScheduler
{
    private static readonly IScheduler scheduler = new StdSchedulerFactory().GetScheduler();

    private static void CreateTaskToDeleteTmpFiles(Object sender)
    {
        scheduler.Start();

        //Create job which will be add to thread
        IJobDetail job = JobBuilder.Create<DeleteTmpJob>()
            .WithIdentity("ClearTmpFiles")
            .StoreDurably()
            .Build();

        //Create thread which run the job after specified conditions
        ITrigger trigger = TriggerBuilder.Create()
            .WithIdentity("ClearTmpFiles")
            .StartAt(DateBuilder.FutureDate(1, IntervalUnit.Second))
            .Build();

        //Add Job and Trigger to scheduler
        scheduler.ScheduleJob(job, trigger);

    }


 }
}

我的工作类别:

public class DeleteTmpJob : IJob
    {
        private IDocumentStore documentStore;
        private IUploaderCollection uploaderCollection;

        public DeleteTmpJob(IDocumentStore _documentStore, IUploaderCollection _uploaderCollection)
        {
            documentStore = _documentStore;
            uploaderCollection = _uploaderCollection;
        }

        public void Execute(IJobExecutionContext context)
        {
            documentStore.ClearTmpDirectory();
        }
    }

作业没有运行

有人可以帮忙吗?

【问题讨论】:

    标签: c# asp.net task scheduler


    【解决方案1】:

    您是否尝试过为您的工作使用空构造函数?

    “每次(和每次)调度程序执行作业时,它都会在调用其 Execute(..) 方法之前创建该类的新实例。这种行为的后果之一是作业必须有一个 no -参数构造函数。”

    您可能需要实现自己的 JobFactory 以允许您使用 DI。您如何实现它取决于您使用的库。

    "当触发器触发时,它关联的JobDetail(实例定义)被加载,并且它所引用的作业类通过调度器上配置的JobFactory进行实例化。默认的JobFactory只是调用作业的默认构造函数类使用 Activator.CreateInstance,然后尝试在类上调用与 JobDataMap 中的键名称匹配的 setter 属性。您可能希望创建自己的 JobFactory 实现来完成诸如拥有应用程序的 IoC 或 DI 容器之类的事情生成/初始化作业实例。”

    来源:see here

    【讨论】:

      【解决方案2】:

      当我删除构造函数工作时,我遇到了同样的问题。首先尝试调用基本构造函数,如果仍然无法正常工作,请尝试删除构造函数。

      【讨论】:

      • 好吧,你是对的,移除构造函数后Job正在运行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多