我尝试在 asp.net MVC 项目中每天定时使用 Quartz.net 发送电子邮件。但这只是一次工作,不能每天重复。这是我的代码
public class EmailJob: IJob
{
private static Logger _logger = LogManager.GetCurrentClassLogger();
public void Execute(IJobExecutionContext context)
{
_logger.Info(DateTime.Now.ToString);
}
}
public static void Start()
{
IScheduler _scheduler = StdSchedulerFactory.GetDefaultScheduler();
_scheduler = StdSchedulerFactory.GetDefaultScheduler();
IJobDetail job = JobBuilder.Create<EmailJob>().WithIdentity("theJob_").StoreDurably(true)
.UsingJobData("para", 1).Build();
_scheduler.AddJob(job, true);
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger3")
.ForJob(job)
.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(8, 0))
.Build();
_scheduler.ScheduleJob(trigger);
_scheduler.Start();
_logger.Info(DateTime.Now.ToString() + "_scheduler start");
}
我在全局调用“JobScheduler.Start()”。谁能告诉我我的代码哪里错了?谢谢提前!
我想你失踪了.RepeatForever()
。您的计划只会运行一次。
但是,如果邮件在 8 点整发送非常重要,那么您应该使用服务器端解决方案,例如服务或计划任务,因为无法保证网站可用。
当站点在线时,您可以使用每 x 分钟运行一次的作业。如果应用程序池回收、网站崩溃或发生其他情况,当它再次上线时,它会立即发送邮件,并且每 10 分钟再次发送一次。
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
IJobDetail job1 = JobBuilder.Create<Job_SendMail>().Build();
ITrigger trigger1 = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInMinutes(10)
.RepeatForever())
.Build();
scheduler.ScheduleJob(job1, trigger1);
public class Job_SendMail: IJob
{
void IJob.Execute(IJobExecutionContext context)
{
//do stuff
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)