首页 > Windows开发 > 详细

Quartz和TopShelf Windows服务作业调度

时间:2018-07-18 12:24:45      阅读:305      评论:0      收藏:0      [点我收藏+]

上一次写了一遍关于Quartz作业调度的文章

Quartz.NET 作业调度使用

现在使用TopShelf和Quartz实现windows服务作业调度

TopShelf版本4.0

Quartz版本3.0.6

任务文件和上次文章的一样将日期写入txt文件中,TimeJob代码如下

    public class TimeJob : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            string filePath = @"D:\\log.txt";
            File.AppendAllText(filePath, DateTime.Now.ToString("yyyy年MM月dd日 HH:mm:ss") + Environment.NewLine);
            Console.WriteLine(DateTime.Now.ToString("yyyy年MM月dd日 HH:mm:ss") + Environment.NewLine);
            return Task.FromResult(true);
        }
    }

 1.创建调度器工厂  ISchedulerFactory factory = new StdSchedulerFactory();

 2.创建任务调度器 IScheduler scheduler = null;

 3.创建任务和触发器

     scheduler = await factory.GetScheduler();
            //创建一个任务
            IJobDetail job = JobBuilder.Create<TimeJob>().WithIdentity("myJob1", "group1").Build();
            //创建一个触发器
            ITrigger trigger = TriggerBuilder.Create().WithIdentity("myTrigger1", "group1").StartNow().
                WithSimpleSchedule(a => a.WithIntervalInSeconds(10).RepeatForever()).Build();
            //将任务和触发器添加到调度器里
            await scheduler.ScheduleJob(job, trigger);

4.开始执行 scheduler.Start()

Manager代码如下

    public class Manager
    {
        //创建调度器工厂
        ISchedulerFactory factory = new StdSchedulerFactory();
        //创建调度器
        IScheduler scheduler = null;
        public Manager() {
            Init();
        }

        private async void Init()
        {
            scheduler = await factory.GetScheduler();
            //创建一个任务
            IJobDetail job = JobBuilder.Create<TimeJob>().WithIdentity("myJob1", "group1").Build();
            //创建一个触发器
            ITrigger trigger = TriggerBuilder.Create().WithIdentity("myTrigger1", "group1").StartNow().
                WithSimpleSchedule(a => a.WithIntervalInSeconds(10).RepeatForever()).Build();
            //将任务和触发器添加到调度器里
            await scheduler.ScheduleJob(job, trigger);
        }

        public async void Start()
        {
            //开始执行
            await scheduler.Start();
        }

        public async void Stop()
        {
            //停止
            await scheduler.Shutdown(false);
        }

        public async void Pause()
        {
            //暂停
            await scheduler.PauseAll();
        }

        public async void Continue()
        {
            //继续
            await scheduler.ResumeAll();
        }
    }

  5.调用

 

 static void Main(string[] args)
        {
            var fac = HostFactory.New(x =>
            {
                x.Service<Manager>(s =>
                {
                    s.ConstructUsing(name => new Manager());
                    s.WhenStarted(m => m.Start());
                    s.WhenStopped(m => m.Stop());
                    s.WhenPaused(m => m.Pause());
                    s.WhenContinued(m => m.Continue());
                });
                x.RunAsLocalSystem();
                x.SetDescription("QuartzTopShelfDemo Windows服务");
                x.SetDisplayName("QuartzTopShelfDemo 服务");
                x.SetServiceName("QuartzTopShelfDemoService");
            });

            fac.Run();

          
            Console.ReadKey();
        }

 配置安装服务

安装:TopshelfDemo.exe install
启动:TopshelfDemo.exe start
卸载:TopshelfDemo.exe uninstall
技术分享图片

技术分享图片

 

 

 

参考:https://topshelf.readthedocs.io/en/latest/configuration/config_api.html#service-name

Quartz和TopShelf Windows服务作业调度

原文:https://www.cnblogs.com/ZJ199012/p/9328367.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!