我想知道有什么方法可以从数据库加载作业和触发器定义。
如果您想从数据库中检索作业列表,您可以执行以下操作:
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);