Quartz .NET作业类型配置问题

时间:2012-06-08 15:59:35

标签: .net quartz.net

我怀疑是在设置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();

我很感激任何关于我出错的地方。

非常感谢,

奇玛

1 个答案:

答案 0 :(得分:1)

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

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

非常感谢,

奇玛