1

我怀疑我在设置 Quartz .NET 配置文件时的疏忽让我目瞪口呆。我已经在论坛中搜索了类似的帖子,这篇帖子' quartz.net from config xml in asp.net '是最相关的,但不幸的是它没有帮助。我会很感激人们能想到的任何帮助或建议。

我正在尝试加载配置文件以使用 Quartz 版本 1 安排一些作业。我的 app.config 文件定义了 Quartz 配置:

<quartz>
        <add key="quartz.scheduler.instanceName" value="QuartzScheduler" />
        <!-- Configure Thread Pool -->
        <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
        <add key="quartz.threadPool.threadCount" value="10" />
        <add key="quartz.threadPool.threadPriority" value="Normal" />
        <!-- Configure Job Store -->
        <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz" />
        <add key="quartz.plugin.xml.type" value="Quartz.Plugin.Xml.JobInitializationPlugin, Quartz" />
        <add key="quartz.plugin.xml.fileNames" value="~/configuration/quartz_jobs.config" />
        <add key="quartz.plugin.xml.scanInterval" value="10" />
    </quartz>

然后我的quartz_jobs.config 文件定义了这些工作:

<?xml version="1.0" encoding="UTF-8"?>
<quartz xmlns="http://quartznet.sourceforge.net/JobSchedulingData"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                version="1.0"
                overwrite-existing-jobs="true">

    <job>
        <job-detail>
            <name>jobName1</name>
            <group>jobGroup1</group>
            <description>jobDesciption1</description>
            <job-type>FundDataImportScheduler.Jobs.FsdImportJob, FundDataImportScheduler</job-type>
            <volatile>false</volatile>
            <durable>true</durable>
            <recover>false</recover>
        </job-detail>

        <trigger>
            <cron>
                <name>cronName1</name>
                <group>cronGroup1</group>
                <description>CronTriggerDescription</description>
                <job-name>jobName1</job-name>
                <job-group>jobGroup1</job-group>
                <cron-expression>0 0/1 * * * ?</cron-expression>
            </cron>
        </trigger>
    </job>
</quartz>

请注意quartz_jobs.config 文件中的节点。我正在尝试加载实现 IJob 的类:

public class FsdImportJob : IJob
{
   public void Execute(JobExecutionContext context)
   {
     Console.WriteLine("FsdImportJob triggered");
   }
}

我遇到的问题是,当节点等于“FundDataImportScheduler.Jobs.FsdImportJob,FundDataImportScheduler”时,未加载作业。如果我在节点中使用“Quartz.Job.NativeJob,Quartz”的值进行测试,则会加载一个作业(虽然不是我想要的)。

FundDataImportScheduler.Jobs.FsdImportJob 是 FsdImportJob 类的确切命名空间,FundDataImportScheduler 是它编译成的 dll。

为了完整起见,我用来构建 Quartz SchedulerFactory 并加载配置的代码是:

ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
IScheduler scheduler = schedulerFactory.GetScheduler();
scheduler.Start();

我将不胜感激任何关于我哪里出错的指示。

非常感谢,

赤马

4

1 回答 1

1

好吧,现在我觉得有点傻 - 问题是因为我最初在控制台应用程序中有 FsdImportJob 类。Quartz 期待 FundDataImportScheduler.dll,但当然只有 FundDataImportScheduler.exe。

一旦我将 FsdImportJob 移到类库中,Quartz 就能够加载库编译的 .dll,从而加载 FsdImportJob 类。

非常感谢,

赤马

于 2012-06-11T12:59:52.917 回答