【问题标题】:Show next job execution scheduled time显示下一个作业执行预定时间
【发布时间】:2023-03-22 03:24:01
【问题描述】:

我想知道 Quartz.Net 是否有办法告诉(或更好地写在日志中)下一次执行...我的意思是,我有一个在上午 10:00 运行的工作,它计划运行每两个小时......有没有办法我可以写一些东西作为 Next run on 12:00 AM?还是我必须解析 cron 表达式,然后将其添加到当前日期? 提前致谢

【问题讨论】:

  • 所以当一个作业完成时,你想在它计划下一次运行的时间写入日志文件,对吗?
  • 是的!那是……有什么建议吗?

标签: c# quartz.net


【解决方案1】:

不确定您使用的是什么记录器,但这种方法应该适用于您可以创建实例的任何记录器。创建记录器实例并通过JobDataMap 将其传递给作业,然后在作业中使用它。 IJobExecutionContext.NextFireTimeUtc 将告诉您下一个执行时间,您可以将其写入记录器

using System;
using System.Threading.Tasks;
using NLog;
using Quartz;
using Quartz.Impl;

namespace QuartzSampleApp
{
    public class Program
    {
        private static async Task Main(string[] args)
        {
            var logger = LogManager.GetCurrentClassLogger();

            StdSchedulerFactory factory = new StdSchedulerFactory();
            IScheduler scheduler = await factory.GetScheduler();

            await scheduler.Start();

            IJobDetail job = JobBuilder.Create<HelloJob>()
                .WithIdentity("job1", "group1")
                .Build();
            job.JobDataMap["logger"] = logger; // add logger to job data map

            ITrigger trigger = TriggerBuilder.Create()
                .WithIdentity("trigger1", "group1")
                .StartNow()
                .WithSimpleSchedule(x => x
                    .WithIntervalInSeconds(10)
                    .RepeatForever())
                .Build();

            await scheduler.ScheduleJob(job, trigger);

            await Task.Delay(TimeSpan.FromSeconds(60));

            await scheduler.Shutdown();

            Console.WriteLine("Press any key to close the application");
            Console.ReadKey();
        }

        // simple log provider to get something to the console
    }

    public class HelloJob : IJob
    {
        public async Task Execute(IJobExecutionContext context)
        {
            await Console.Out.WriteLineAsync("Greetings from HelloJob!");

            var logger = context.JobDetail.JobDataMap["logger"] as ILogger;

            logger.Log(LogLevel.Info, "Next job execution at " + context.NextFireTimeUtc);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    相关资源
    最近更新 更多