2012-06-08 45 views
1

我一直被我猜想是我在设置Quartz .NET配置文件方面的疏忽所迷惑。我在论坛上搜索过类似的帖子,这个帖子'quartz.net from config xml in asp.net'是最相关的,但不幸的是它没有帮助。我会很感激任何人可以想到的帮助或建议。Quartz .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。

为了完整起见,我用建石英SchedulerFactory和加载配置的代码是:

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

我将不胜感激任何指针,以我要去的地方错了。

非常感谢,

奇玛

回答

1

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

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

非常感谢,

奇玛

+0

似乎是一个合理的假设! – tommed