gpt4 book ai didi

c# - quartz 作业商店与事件数据有关?

转载 作者:太空狗 更新时间:2023-10-30 00:15:43 24 4
gpt4 key购买 nike

据我了解 Quartz official documentation , AdoStore 必须用于像 JobDataMap 和其他数据这样的事件数据存储。如果我错了,请纠正我。

除了这个说明之外,我想知道是否有任何方法可以从数据库加载作业和触发器定义。某种插件或类似 Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin 的东西用于从 xml 文件中读取。

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

[编辑] Rastko 2012 年 8 月 13 日上午 11:16:28

从下面的回答中我认为我没有很好地描述你的问题。我想从数据库加载作业和触发器配置。就像它在代码或 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>

我想在数据库中以同样的方式拥有它。从为 ADOJobStore 生成的表中,我看到这些表与跟踪当前事件的作业更相关 - 跟踪其状态、触发器触发等。

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

最佳答案

I would like to know is there any way to load job and trigger definition from database.

如果你想从数据库中检索一份工作列表,你可以这样做:

  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)
}
);

此语法适用于 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);

如果您希望在不附加触发器的情况下向数据库添加作业

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

scheduler.AddJob(jobDetail, false)

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

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

scheduler.ScheduleJob(trigger1);

关于c# - quartz 作业商店与事件数据有关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11904667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com