我在我的项目中使用quartz.NET,我遇到了问题,我想每天23点运行Schedule任务,我正在使用此代码来执行此操作:
public class HelloJob : IJob
{
public void Execute(IJobExecutionContext context)
{
//Download file
}
}
public interface ISchedule
{
void Run();
}
public class HelloSchedule : ISchedule
{
public void Run()
{
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.ForJob(job)
.WithIdentity("trigger1")
.StartNow()
.WithCronSchedule("0 0 23 ? * MON-FRI *")
.Build();
ISchedulerFactory sf = new StdSchedulerFactory();
IScheduler sc = sf.GetScheduler();
sc.ScheduleJob(job, trigger);
sc.Start();
}
}
但遗憾的是它不是火,
我怎么知道问题是什么并解决了?
感谢您的建议
答案 0 :(得分:1)
你的工作将在晚上11点解雇 您可以使用以下代码检查工作的下一个开火时间:
private static DateTime getNextFireTimeForJob(IScheduler scheduler, string jobName, string groupName = "")
{
JobKey jobKey = null;
if (!string.IsNullOrEmpty(groupName))
{
jobKey = new JobKey(jobName, groupName);
}
else
{
jobKey = new JobKey(jobName);
}
DateTime nextFireTime = DateTime.MinValue;
bool isJobExisting = Scheduler.CheckExists(jobKey);
if (isJobExisting)
{
var detail = scheduler.GetJobDetail(jobKey);
var triggers = scheduler.GetTriggersOfJob(jobKey);
var myTrigger = triggers.Where(f => f.Key.Name == "SecondTrigger").SingleOrDefault();
if (triggers.Count > 0)
{
var nextFireTimeUtc = triggers[0].GetNextFireTimeUtc();
nextFireTime = TimeZone.CurrentTimeZone.ToLocalTime(nextFireTimeUtc.Value.DateTime);
}
}
return (nextFireTime);
}
并使用此信息获取信息:
var nextFireTime = getNextFireTimeForJob(sc, "job1");
确保HelloJob
实施IJob
。
如果您在QuartApp中将Quartz.net调度程序集成在一起,请确保它是创建单例的,因为它可能会在超出范围时被销毁。
我在控制台应用程序中测试我的作业,并使用Console.ReadLine();
等待作业执行。
答案 1 :(得分:0)
使用org.Quartz并试一试:
JobDetail job = new JobDetail();
job.setName(Constants.JOB_NAME);
job.setJobClass(YOUR_JOB_CLASS.class);
CronTrigger trigger = new CronTrigger();
trigger.setName(Constants.TRIGGER_NAME);
trigger.setCronExpression("0 0 23 ? * MON-FRI *");
// schedule it
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
您的Job类应该实现 org.Quartz.Job 接口并覆盖其执行方法,该方法执行作业需要执行的实际操作。