博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quartz.NET 任务调度框架 - 01
阅读量:2236 次
发布时间:2019-05-09

本文共 5617 字,大约阅读时间需要 18 分钟。

在之前的博客中,介绍过Quartz任务调度框架(Java版本)。最近在.NET平台使用了Quartz任务调度框架,并且结合TopShelf框架,把Quartz发布成Windows Service。

今天把示例贴出来,作为自己学习的记录,如果对读者有所帮助,幸甚至哉!

1.资源

1)Quartz 类库

2)TopShelf/TopShelf.Log4Net

3)Common.Logging/Common.Logging.Core/Common.Logging.Log4Net

2.Jobs

1)FirstJob

using log4net;using Quartz;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace QuartzDemo.QuartzJobs{    public sealed class FirstJob : IJob    {        private readonly ILog _logger = LogManager.GetLogger(typeof(FirstJob));        public void Execute(IJobExecutionContext context)        {            _logger.InfoFormat("FirstJob executed successfully.");        }    }}
2)SecondJob

using log4net;using Quartz;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace QuartzDemo.QuartzJobs{    public sealed class SecondJob : IJob    {        private readonly ILog _logger = LogManager.GetLogger(typeof(SecondJob));        public void Execute(IJobExecutionContext context)        {            _logger.InfoFormat("SecondJob executed successfully.");        }    }}
3.配置Jobs

true
FirstJob
First
First Job Test
QuartzDemo.QuartzJobs.FirstJob,QuartzDemo
true
false
FirstJobTrigger
First
FirstJob
First
2015-01-22T00:00:00+08:00
0/5 * * * * ?
SecondJob
Second
Second Job Test
QuartzDemo.QuartzJobs.SecondJob,QuartzDemo
true
false
SecondJobTrigger
Second
SecondJob
Second
2015-01-22T00:00:00+08:00
0/3 * * * * ?
4.quartz.config

# You can configure your scheduler in either 
configuration section# or in quartz properties file# Configuration section has precedencequartz.scheduler.instanceName = QuartzTest# configure thread pool infoquartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartzquartz.threadPool.threadCount = 10quartz.threadPool.threadPriority = Normal# job initialization plugin handles our xml reading, without it defaults are usedquartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartzquartz.plugin.xml.fileNames = ~/quartz_jobs.xml# export this server to remoting context#quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz#quartz.scheduler.exporter.port = 555#quartz.scheduler.exporter.bindName = QuartzScheduler#quartz.scheduler.exporter.channelType = tcp#quartz.scheduler.exporter.channelName = httpQuartz
5.TopShelf

服务有启动,停止,继续,暂停等动作,我们使用TopShelf框架很方便地实现。

using Quartz;using Quartz.Impl;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Topshelf;namespace QuartzDemo{    public sealed class ServiceRunner : ServiceControl, ServiceSuspend    {        private readonly IScheduler scheduler;        public ServiceRunner()        {            scheduler = StdSchedulerFactory.GetDefaultScheduler();        }        public bool Start(HostControl hostControl)        {            scheduler.Start();            return true;        }        public bool Stop(HostControl hostControl)        {            scheduler.Shutdown(false);            return true;        }        public bool Continue(HostControl hostControl)        {            scheduler.ResumeAll();            return true;        }        public bool Pause(HostControl hostControl)        {            scheduler.PauseAll();            return true;        }    }}
6.Log4Net配置

7.TopShelf启动

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using Topshelf;namespace QuartzDemo{    class Program    {        static void Main(string[] args)        {            var fileInfo = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config");            log4net.Config.XmlConfigurator.ConfigureAndWatch(fileInfo);            HostFactory.Run(x =>            {                x.RunAsLocalSystem();                x.Service
(); x.SetDescription("QuartzDemo服务描述"); x.SetDisplayName("QuartzDemo服务显示名称"); x.SetServiceName("QuartzDemo服务名称"); x.EnablePauseAndContinue(); }); } }}
8.效果

安装十分简单,在DOS(系统管理员身份启动)环境下,切换到QuartzDemo.exe所在目录

QuartzDemo.exe install
服务安装后并启动后如下:

你可能感兴趣的文章
【托业】【新东方托业全真模拟】TEST05~06-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST09~10-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST07~08-----P5~6
查看>>
solver及其配置
查看>>
JAVA多线程之volatile 与 synchronized 的比较
查看>>
Java集合框架知识梳理
查看>>
笔试题(一)—— java基础
查看>>
Redis学习笔记(三)—— 使用redis客户端连接windows和linux下的redis并解决无法连接redis的问题
查看>>
Intellij IDEA使用(一)—— 安装Intellij IDEA(ideaIU-2017.2.3)并完成Intellij IDEA的简单配置
查看>>
Intellij IDEA使用(二)—— 在Intellij IDEA中配置JDK(SDK)
查看>>
Intellij IDEA使用(三)——在Intellij IDEA中配置Tomcat服务器
查看>>
Intellij IDEA使用(四)—— 使用Intellij IDEA创建静态的web(HTML)项目
查看>>
Intellij IDEA使用(五)—— Intellij IDEA在使用中的一些其他常用功能或常用配置收集
查看>>
Intellij IDEA使用(六)—— 使用Intellij IDEA创建Java项目并配置jar包
查看>>
Eclipse使用(十)—— 使用Eclipse创建简单的Maven Java项目
查看>>
Eclipse使用(十一)—— 使用Eclipse创建简单的Maven JavaWeb项目
查看>>
Intellij IDEA使用(十三)—— 在Intellij IDEA中配置Maven
查看>>
面试题 —— 关于main方法的十个面试题
查看>>
集成测试(一)—— 使用PHP页面请求Spring项目的Java接口数据
查看>>
使用Maven构建的简单的单模块SSM项目
查看>>