Asp.net mvc 如何在asp.net mvc中使用quartz.net停止当前作业并启动新作业?
我在一个网站上制作了一个爬虫程序,它必须阅读一个网站并从它的网站上获取一些值。我使用了quartz.net和Asp.net MVC。但我的问题是什么?事实上,我的问题是,例如,他/她第一次开始清理Asp.net mvc 如何在asp.net mvc中使用quartz.net停止当前作业并启动新作业?,asp.net-mvc,quartz.net,Asp.net Mvc,Quartz.net,我在一个网站上制作了一个爬虫程序,它必须阅读一个网站并从它的网站上获取一些值。我使用了quartz.net和Asp.net MVC。但我的问题是什么?事实上,我的问题是,例如,他/她第一次开始清理“Stackoverflow.com”大约5个小时,然后他/她决定停止“Stackoverflow.com”,并创建一个新的网站。那么,我该怎么做呢 [HttpPost] 公共操作结果索引(字符串关键字、字符串url) { isScheduler scheduler=StdSchedulerFacto
“Stackoverflow.com”
大约5个小时,然后他/她决定停止“Stackoverflow.com”
,并创建一个新的网站。那么,我该怎么做呢
[HttpPost]
公共操作结果索引(字符串关键字、字符串url)
{
isScheduler scheduler=StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
IJobDetail job=JobBuilder.Create()
.WithIdentity(“我的工作”)
.使用作业数据(“url”,url)
.使用作业数据(“关键字”,关键字)
.Build();
ITrigger trigger=TriggerBuilder.Create()。带DailyTimeIntervalsSchedule(
s=>s.WithIntervalInSeconds(20).OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(0,0))
).Build();
ScheduleJob(作业,触发器);
返回视图(db.Scraps.ToList());
}
公共列表抓取(字符串url、字符串关键字)
{
整数计数=0;
列表报废=新列表();
报废作业报废=空;
HtmlDocument doc=新的HtmlDocument();
尝试
{
var request=(HttpWebRequest)WebRequest.Create(url);
request.Method=“GET”;
使用(var response=(HttpWebResponse)request.GetResponse())
{
使用(var stream=response.GetResponseStream())
{
文档加载(流、编码、GetEncoding(“UTF-8”);
foreach(doc.DocumentNode.SelectNodes(“//text()”)中的HtmlNode节点)
{
if(node.InnerText.ToString()包含(关键字))
{
计数++;
scrap=newscrapjob{Keyword=Keyword,DateTime=System.DateTime.Now.ToString(),Count=Count,Url=Url};
}
}
}
}
}
捕获(WebException ex)
{
控制台写入线(例如消息);
}
//废料。添加(废料);
var isExist=db.Scraps.Where(s=>s.Keyword==Keyword&&s.Count==Scraps.Count)。Max(s=>(int?)s.Id)??0;
如果(isExist==0)
{
db.废料。添加(废料);
db.SaveChanges();
}
回收废料;
}
public void Execute(IJobExecutionContext上下文)
{
//报废作业报废=空;
使用(var scrap=new ScrapJob())
{
JobKey key=context.jobdail.key;
JobDataMap dataMap=context.jobdail.JobDataMap;
字符串url=dataMap.GetString(“url”);
字符串关键字=dataMap.GetString(“关键字”);
报废.报废(url,关键字);
}
}
我不知道你为什么选择石英,但我认为这里有一些东西可以帮助你
这是一个通过唯一标识符中断和删除作业的代码示例
public void DeleteJob(JobKey jobKey)
{
var scheduler = StdSchedulerFactory.GetDefaultScheduler();
var executingJobs = scheduler.GetCurrentlyExecutingJobs();
if (executingJobs.Any(x => x.JobDetail.Key.Equals(jobKey)))
{
scheduler.Interrupt(jobKey);
}
scheduler.DeleteJob(jobKey);
}
但我相信你需要定义你期望的行为,因为它可能更复杂,例如:
var isExist = db.Scraps.Where(s => s.Keyword == keyword && s.Count == scrap.Count).Max(s => (int?)s.Id) ?? 0;
你可以用。任何
var exists = db.Scraps.Any(s => s.Keyword == keyword && s.Count == scrap.Count);
这将返回布尔值,您可以检查(!是否存在)
您可以查看它的高性能web解析库。超级容易使用以及
如果您按关键字和计数检查记录,我会看到按关键字重复记录的可能性-不确定您是要这样做,还是只想用计数器更新现有记录
祝你好运!我希望这个答案能帮助您:)我想删除作业Quartz时出错。无法中断作业异常:无法中断,因为它没有实现Quartz.IIInterruptableJob'
var isExist = db.Scraps.Where(s => s.Keyword == keyword && s.Count == scrap.Count).Max(s => (int?)s.Id) ?? 0;
var exists = db.Scraps.Any(s => s.Keyword == keyword && s.Count == scrap.Count);