Quartz作业存储与活动数据有关吗?

Ras*_*tko 4 .net c# quartz.net

正如我从Quartz官方文档中所理解的那样,AdoStore必须用于存储JobDataMap和其他数据之类的活动数据.如果我错了,请纠正我.

除了这个澄清之外,我想知道有没有办法从数据库加载作业和触发器定义.Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin用于从xml文件中读取的插件或类似的东西.

如果没有,是否是实现自定义插件的最佳解决方案,该插件将从数据库读取或使用其他方法?

[编辑] Rastko 8/13/2012 11:16:28 AM

从吼叫的答案我认为我没有把问题描述给你好.我想从数据库加载作业和触发器配置.就像它在代码或xml中定义的那样:

    <job>
  <name>WriterJob</name>
  <group>CommonGroup</group>
  <description>Test WriteJob</description>
  <job-type>Console.WriteJob, Console</job-type>
</job>
<trigger>
  <simple>
    <name>WriterJobTrigger</name>
    <group>CommonTriggerGroup</group>
    <description>Simple trigger to simply fire sample job</description>
    <job-name>WriterJob</job-name>
    <job-group>CommonGroup</job-group>
    <misfire-instruction>SmartPolicy</misfire-instruction>
    <repeat-count>-1</repeat-count>
    <repeat-interval>10000</repeat-interval>
  </simple>
</trigger>
Run Code Online (Sandbox Code Playgroud)

我想在DataBase中以相同的方式使用它.从ADOJobStore的生成表中我看到这些表与跟踪当前活动作业更相关 - 跟踪其状态,触发器触发等.

我希望我现在更清楚了.如果您需要任何其他说明,请随时问我.

sgm*_*ore 11

我想知道有没有办法从数据库加载作业和触发器定义.

如果您要从数据库中检索作业列表,可以执行以下操作:

  Quartz.IScheduler scheduler ; 


   ....

  var details = (from groupName in scheduler.GetJobGroupNames()
                 from jobKey in scheduler.GetJobKeys(
                      Quartz.Impl.Matchers.GroupMatcher<Quartz.JobKey>
                      .GroupEquals(groupName))
                select new 
                { 
                    GroupName = groupName, 
                    JobName = jobKey.Name  , 
                    triggers = scheduler.GetTriggersOfJob(jobKey) 
                }
               );
Run Code Online (Sandbox Code Playgroud)

此语法适用于Quartz 2.0.

如果要从实际执行作业的程序构建单独的程序,则只需创建具有相同详细信息但不调用scheduler的调度程序.Start()

如果您要在数据库中添加新作业,可以执行以下操作:

(其中SimpleJob是您作业的C#类名称)

string jobName = ...
string triggerName = ...
string cronExpression = ...  
Quartz.IScheduler scheduler = ... 


Quartz.IJobDetail jobDetail = Quartz.JobBuilder.Create<SimpleJob>()
                    .WithIdentity(jobName)
                    .StoreDurably()
                    .Build();

Quartz.ITrigger trigger = Quartz.TriggerBuilder.Create()
                    .WithIdentity(triggerName)
                    .WithSchedule(Quartz.CronScheduleBuilder.CronSchedule(cronExpression)
                    .ForJob(jobName)
                    .Build();

scheduler.ScheduleJob(jobDetail, trigger);
Run Code Online (Sandbox Code Playgroud)

如果您要在不附加触发器的情况下将作业添加到数据库

Quartz.IJobDetail jobDetail = Quartz.JobBuilder.Create<SimpleJob>()
                    .WithIdentity(jobName)
                    .StoreDurably()
                    .Build();

scheduler.AddJob(jobDetail, false)
Run Code Online (Sandbox Code Playgroud)

如果您希望安排执行一次性现有工作,那么

   Quartz.ITrigger trigger1 = Quartz.TriggerBuilder.Create()
                        .WithIdentity(triggerName)
                        .WithSchedule(Quartz.SimpleScheduleBuilder.Create())
                        .ForJob(jobName)
                        .Build();

   scheduler.ScheduleJob(trigger1);
Run Code Online (Sandbox Code Playgroud)