有什么办法可以在数据库中的JobDetail记录上创建新的触发器,但不是在内存中?具体用途:我有计划每天使用cron触发器运行的作业。有时候某一天的工作需要用相同的参数重新运行。我想用相同的JobDetail创建一个新的简单触发器,因为这是存储参数的地方。 Reschedule()不起作用,因为它删除了现有的触发器。那可能吗?可以重复使用JobDetail记录,以及如何?
回答
是的,你可以。
我会做的是从数据库中抓取工作:
var myJob = Scheduler.GetJobDetail(jobName, groupName);
和使用(这很可能你已经使用)的功能
Scheduler.ScheduleJob(JobDetail jobDetail, Trigger trigger);
通过你的新的触发。 您不必做太多的事情,因为运行时间会在几秒钟后从数据库中获取新触发器并运行它。
UPDATE
有两种方式来添加触发器与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]);
}
}
在Quartz.net,我不得不做不同这一点:
Trigger trigger = new SimpleTrigger(triggerName, triggerGroup, newDateTime); trigger.JobName = jobName; trigger.GroupName = jobGroup; Scheduler.ScheduleJob(trigger);
这工作。
酷,我基本上做了布鲁斯在这里说,它为我工作。 – jpierson 2015-04-13 15:40:39
对于QuartzNet,Scheduler.GetJobDetail(jobName, groupName)
不可用。 而是使用:
ISchedulerFactory schedFact = new StdSchedulerFactory();
IScheduler sched = schedFact.GetScheduler();
sched.Start();
sched.GetJobDetail(new JobKey("job1", "group1"));
附加参考:GetJobDetail Method
如果您需要删除所有工作/触发器在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);
}
}
- 1. 取重复的记录,以及在SSIS
- 2. 是否可以使用XSLT样式表过滤重复记录?
- 3. 如何捕获我使用tableadapter插入的记录以避免重复记录?
- 4. 如何调用数据库记录以及数据库记录
- 5. 确定重复以及在oracle中匹配的唯一记录
- 6. 删除记录以及子记录
- 7. 重复以及如何摆脱它们
- 8. 关于可重复使用的html控件以及javascript代码
- 9. 地图,以避免重复的记录
- 10. 如何正确使用记录器以及如何在Ruby和Rails中使用同一个记录器
- 11. 如何查询表,以获取其链路记录中没有任何记录,并有过滤记录,以及
- 12. Nginx日志记录配置以及如何使其工作
- 13. 选择记录的重复子字符串以单个记录使用分组
- 14. 使用postgres重复记录
- 15. 如何重复使用会话以避免在使用rvest进行重复登录时重复登录?
- 16. 如何使用SQL来选择重复记录以及相关项目的计数?
- 17. 如何使用以及scipy.optimize.fmin
- 18. MySQL来笨活动记录,以删除重复记录
- 19. 删除SQL中第一条记录以外的重复记录
- 20. 删除除一个重复记录以外的所有记录
- 21. 我可以提取在sql中重复的提取记录吗?
- 22. 记录何时以及如何在Web应用程序中使用PHP文件
- 23. 在SQL中级联复制?可以自动复制记录及其相关记录吗?
- 24. 如何重命名Oracle中的主键,以便它可以重复使用
- 25. 如何使用ruby解析XML以获得重复的标记?
- 26. 如何以及在哪里可以使用Reactive Extensions?
- 27. 如何使用facebookAPI以及我在哪里可以找到它?
- 28. 我们可以以及如何使用Urbanairship for iOS app Enterprise Distribution?
- 29. 哪里可以创建以及如何在iOS中使用Enum?
- 30. 是否可以使用F#中的LINQ以及如何操作?
品尝过。也许它在Quartz中有效,但是在Quartz.net中,GetJobDetail()可以工作,但是ScheduleJob()失败,出现“无法存储作业:无法存储名称为Job'的作业:'作业名称1234'和组:'Group Name',因为已经有了这个身份证明。“ – 2011-03-31 16:56:55
我现在正在使用这个东西(石英。净)在一个月的挣扎之后。我会更新我的答案,为您提供更多信息。 – LeftyX 2011-04-01 15:40:31