C# JobDetail记录可以重复使用吗?如何重复使用?
有没有办法在数据库中但不在内存中的JobDetail记录上创建新触发器?特定用途:我计划每天使用cron触发器运行作业。有时,某一天的作业需要使用相同的参数重新运行。我想使用相同的JobDetail创建一个新的简单触发器,因为参数存储在这里。Reschedule()不起作用,因为它删除了现有触发器。那可能吗?是的,你可以 我要做的是从数据库中获取作业:C# JobDetail记录可以重复使用吗?如何重复使用?,c#,quartz.net,C#,Quartz.net,有没有办法在数据库中但不在内存中的JobDetail记录上创建新触发器?特定用途:我计划每天使用cron触发器运行作业。有时,某一天的作业需要使用相同的参数重新运行。我想使用相同的JobDetail创建一个新的简单触发器,因为参数存储在这里。Reschedule()不起作用,因为它删除了现有触发器。那可能吗?是的,你可以 我要做的是从数据库中获取作业: var myJob = Scheduler.GetJobDetail(jobName, groupName); 并使用该函数(可能您已经使用过
var myJob = Scheduler.GetJobDetail(jobName, groupName);
并使用该函数(可能您已经使用过)
通过你的新扳机。
您不必做太多,因为运行时将在几秒钟后从DB获取新触发器并运行它
更新
使用Quartz.net添加触发器有两种方法
1) 您可以添加作业,然后添加触发器:
Scheduler.AddJob(jobToSchedule, true);
Scheduler.ScheduleJob(triggerToSchedule);
2) 您可以安排触发器同时添加作业:
Scheduler.ScheduleJob(jobToSchedule, triggerToSchedule);
如果尝试以这种方式添加作业和触发器:
Scheduler.AddJob(jobToSchedule, true);
Scheduler.ScheduleJob(jobToSchedule, triggerToSchedule);
您会得到一个异常,警告您作业已经存在
我建议您在进行任何测试之前清理数据库,因为您可能有一些待处理的工作。您可以在此处找到一个简单的清洁程序:
// unschedule jobs
string[] groups = Scheduler.TriggerGroupNames;
for (int i = 0; i < groups.Length; i++)
{
string[] names = Scheduler.GetTriggerNames(groups[i]);
for (int j = 0; j < names.Length; j++)
{
Scheduler.UnscheduleJob(names[j], groups[i]);
}
}
// delete jobs
groups = Scheduler.JobGroupNames;
for (int i = 0; i < groups.Length; i++)
{
string[] names = Scheduler.GetJobNames(groups[i]);
for (int j = 0; j < names.Length; j++)
{
Scheduler.DeleteJob(names[j], groups[i]);
}
}
//计划外作业
string[]groups=Scheduler.TriggerGroupNames;
对于(int i=0;i
是的,你可以
我要做的是从数据库中获取作业:
var myJob = Scheduler.GetJobDetail(jobName, groupName);
并使用该函数(可能您已经使用过)
通过你的新扳机。
您不必做太多,因为运行时将在几秒钟后从DB获取新触发器并运行它
更新
使用Quartz.net添加触发器有两种方法
1) 您可以添加作业,然后添加触发器:
Scheduler.AddJob(jobToSchedule, true);
Scheduler.ScheduleJob(triggerToSchedule);
2) 您可以安排触发器同时添加作业:
Scheduler.ScheduleJob(jobToSchedule, triggerToSchedule);
如果尝试以这种方式添加作业和触发器:
Scheduler.AddJob(jobToSchedule, true);
Scheduler.ScheduleJob(jobToSchedule, triggerToSchedule);
您会得到一个异常,警告您作业已经存在
我建议您在进行任何测试之前清理数据库,因为您可能有一些待处理的工作。您可以在此处找到一个简单的清洁程序:
// unschedule jobs
string[] groups = Scheduler.TriggerGroupNames;
for (int i = 0; i < groups.Length; i++)
{
string[] names = Scheduler.GetTriggerNames(groups[i]);
for (int j = 0; j < names.Length; j++)
{
Scheduler.UnscheduleJob(names[j], groups[i]);
}
}
// delete jobs
groups = Scheduler.JobGroupNames;
for (int i = 0; i < groups.Length; i++)
{
string[] names = Scheduler.GetJobNames(groups[i]);
for (int j = 0; j < names.Length; j++)
{
Scheduler.DeleteJob(names[j], groups[i]);
}
}
//计划外作业
string[]groups=Scheduler.TriggerGroupNames;
对于(int i=0;i
在Quartz.net中,我不得不做一些不同的事情:
Trigger Trigger=new SimpleTrigger(triggerName、triggerGroup、newDateTime);
trigger.JobName=JobName;
trigger.GroupName=作业组;
ScheduleJob(触发器)代码>
成功了 在Quartz.net中,我不得不做一些不同的事情:
Trigger Trigger=new SimpleTrigger(triggerName、triggerGroup、newDateTime);
trigger.JobName=JobName;
trigger.GroupName=作业组;
ScheduleJob(触发器)代码>
成功了 对于,调度程序。GetJobDetail(jobName,groupName)
不可用。
而是使用:
ISchedulerFactory schedFact = new StdSchedulerFactory();
IScheduler sched = schedFact.GetScheduler();
sched.Start();
sched.GetJobDetail(new JobKey("job1", "group1"));
附加参考:对于,调度程序。GetJobDetail(jobName,groupName)
不可用。
而是使用:
ISchedulerFactory schedFact = new StdSchedulerFactory();
IScheduler sched = schedFact.GetScheduler();
sched.Start();
sched.GetJobDetail(new JobKey("job1", "group1"));
其他参考资料:如果您需要删除Quartz.Net 2.0中的所有作业/触发器,这将为您完成:
var groups = _scheduler.GetJobGroupNames().ToList();
foreach (var group in groups)
{
var jobKeys = _scheduler.GetJobKeys(GroupMatcher<JobKey>.GroupEquals(group)).ToList();
foreach (var jobKey in jobKeys)
{
_scheduler.DeleteJob(jobKey);
}
}
var groups=\u调度程序.GetJobGroupNames().ToList();
foreach(组中的var组)
{
var jobKeys=_scheduler.GetJobKeys(GroupMatcher.GroupEquals(group)).ToList();
foreach(jobKey中的var jobKey)
{
_scheduler.DeleteJob(jobKey);
}
}
如果您需要删除Quartz.Net 2.0中的所有作业/触发器,这将为您完成:
var groups = _scheduler.GetJobGroupNames().ToList();
foreach (var group in groups)
{
var jobKeys = _scheduler.GetJobKeys(GroupMatcher<JobKey>.GroupEquals(group)).ToList();
foreach (var jobKey in jobKeys)
{
_scheduler.DeleteJob(jobKey);
}
}
var groups=\u调度程序.GetJobGroupNames().ToList();
foreach(组中的var组)
{
var jobKeys=_scheduler.GetJobKeys(GroupMatcher.GroupEquals(group)).ToList();
foreach(jobKey中的var jobKey)
{
_scheduler.DeleteJob(jobKey);
}
}
以前试过这个。也许它在Quartz中可以工作,但在Quartz.net中,GetJobDetail()可以工作,但是ScheduleJob()失败了,因为“无法存储作业:无法存储名为:'job name 1234'和组名为:'group name'的作业,因为已经存在一个具有此标识的作业。”经过一个月的努力,我现在正在处理这个东西(Quartz.net)。我将更新我的答案以提供更多信息。以前尝试过这个。也许它在Quartz中可以工作,但在Quartz.net中,GetJobDetail()可以工作,但是ScheduleJob()失败了,因为“无法存储作业:无法存储名为:'job name 1234'和组名为:'group name'的作业,因为已经存在一个具有此标识的作业。”经过一个月的努力,我现在正在处理这个东西(Quartz.net)。我会更新我的答案,给你更多的信息。酷,我基本上按照Bruce在这里说的那样做了,它为我工作