【问题标题】:Quartz.NET and AdoJobStoreQuartz.NET 和 AdoJobStore
【发布时间】:2011-06-05 16:51:31
【问题描述】:

我已经为 Quartz.NET 创建了数据库。将其配置为以这种方式使用 AdoJobStore:

        properties["quartz.scheduler.instanceName"] = "TestScheduler";
        properties["quartz.scheduler.instanceId"] = "instance_one";
        properties["quartz.threadPool.type"] = 
                   "Quartz.Simpl.SimpleThreadPool, Quartz";
        properties["quartz.threadPool.threadCount"] = "5";
        properties["quartz.threadPool.threadPriority"] = "Normal";
        properties["quartz.jobStore.misfireThreshold"] = "60000";
        properties["quartz.jobStore.type"] = 
                   "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
        properties["quartz.jobStore.useProperties"] = "true";
        properties["quartz.jobStore.dataSource"] = "default";
        properties["quartz.jobStore.tablePrefix"] = "Q";
        properties["quartz.jobStore.clustered"] = "true";
        // if running MS SQL Server we need this
        properties["quartz.jobStore.lockHandler.type"] = 
                   "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz";

        properties["quartz.dataSource.default.connectionString"] = 
                   "Server=.;Database=Test;Trusted_Connection=True;";
        properties["quartz.dataSource.default.provider"] = "SqlServer-20";
        ISchedulerFactory sf = new StdSchedulerFactory(properties);
        IScheduler sched = sf.GetScheduler();

我在 JOB_DETAILS 表中添加了一个作业,并相应地在 TRIGGERS 和 CRONTRIGGERS 表中添加了一个触发器,但我的作业不会执行。我使用 SQL Server Profiler 进行检查,Quartz 正在执行的唯一查询是SELECT * FROM QSchedulerState。我用sched.Start(); 启动调度程序,它不在JOB_DETAILS 表中。我不知道出了什么问题。

有什么想法吗?

谢谢。

【问题讨论】:

    标签: .net quartz-scheduler quartz.net


    【解决方案1】:

    我同意 NinjaNye 的观点。您必须使用 API 提交作业,因为它需要在运行时绑定类的命名空间。 过程很simple

    // construct job info
    JobDetail jobDetail = new JobDetail("myJob", null, typeof(HelloJob));
    // fire every hour
    Trigger trigger = TriggerUtils.MakeHourlyTrigger();
    // start on the next even hour
    trigger.StartTimeUtc = TriggerUtils.GetEvenHourDate(DateTime.UtcNow);  
    trigger.Name = "myTrigger";
    sched.ScheduleJob(jobDetail, trigger); 
    

    如您所见,我们将工作类型传递给 JobDetail:typeof(HelloJob)。 这将被调度程序用于在执行期间绑定我们的作业。

    【讨论】:

      【解决方案2】:

      您是否通过 sql 将作业直接添加到表中?如果是这样,请尝试通过代码使用 api 注册作业。如果没有其他内容,您可以检查您添加的内容是否与 api 生成的数据相匹配

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-03
        • 1970-01-01
        • 1970-01-01
        • 2012-06-22
        • 2011-09-27
        • 1970-01-01
        相关资源
        最近更新 更多