.Net Core 2.0 的 ConsoleApp 搭建 Quartz(xml配置)windows服务
零、创建一个.Net Core 2.0 的ConsoleApp 应用,建完就是这个样子了。
添加Log4Net 的引用,(不想看可以不看,个人习惯)
Install-Package log4net
添加Config文件夹
往文件夹里面添加Log4net.xml(别忘记了设置Copy always)
添加Log4NetConfig.cs文件
往里面写几行代码
/// <summary>
/// log4net拓展
/// </summary>
public sealed class Log4netConfig
{
/// <summary>
/// 配置默认数据
/// </summary>
public static void DefalutConfig()
{
var defalutResposity = LogManager.GetRepository(Assembly.GetCallingAssembly());
var path = Path.Combine(Directory.GetCurrentDirectory(), "Config", "Log4net.xml");
XmlConfigurator.Configure(defalutResposity, new FileInfo(path));
}
}
Log4netConfig
在Main函数加下面几行代码
Environment.CurrentDirectory = AppContext.BaseDirectory;
Log4NetConfig.DefalutConfig();
var logger = LogManager.GetLogger(typeof(Program));
logger.Info("服务开始");
Main
得到的差不多就是这样了

运行下,可以看到日志基本就没错了。
一、windows服务的搭建
大概或许是看下了https://github.com/aspnet/Hosting/tree/dev/src/Microsoft.AspNetCore.Hosting,随便乱写的
1.引用
Install-Package System.ServiceProcess.ServiceController
Install-Package Install-Package System.Configuration.ConfigurationManager
2.添加appSettings.config
在Config文件夹下添加appSettings.config
添加内容
<appSettings>
<!--服务名称-->
<add key="ServiceName" value="MyTestService"/>
</appSettings>
3.添加HostService.cs
然后写上如下代码
/// <summary>
/// 服务
/// </summary>
public class HostService : ServiceBase
{
private ILog Log = LogManager.GetLogger(typeof(HostService)); /// <summary>
/// Creates an instance of <c>WebHostService</c> which hosts the specified web application.
/// </summary>
/// <param name="host">The configured web host containing the web application to host in the Windows service.</param>
public HostService()
{
} public void Start()
{
Log.Info($"{base.ServiceName}服务开启");
OnStart(null);
} protected sealed override void OnStart(string[] args)
{
OnStarting(args);
//dosomthing
OnStarted();
} protected sealed override void OnStop()
{
Log.Info($"{base.ServiceName}服务关闭");
OnStopping();
try
{
}
finally
{
OnStopped();
}
} /// <summary>
/// Executes before ASP.NET Core starts.
/// </summary>
/// <param name="args">The command line arguments passed to the service.</param>
protected virtual void OnStarting(string[] args) { } /// <summary>
/// Executes after ASP.NET Core starts.
/// </summary>
protected virtual void OnStarted() { } /// <summary>
/// Executes before ASP.NET Core shuts down.
/// </summary>
protected virtual void OnStopping() { } /// <summary>
/// Executes after ASP.NET Core shuts down.
/// </summary>
protected virtual void OnStopped() { }
}
HostService
4. Main 改为如下代码
var serviceName = ConfigurationManager.AppSettings["ServiceName"];
var hostService = new HostService { ServiceName = serviceName };
logger.Info("服务开始");
#if DEBUG
//服务名称赋值
Console.WriteLine($"{serviceName}服务开启...");
hostService.Start(); Console.ReadKey(true);
hostService.Stop();
Console.WriteLine($"{serviceName}服务停止");
#else
logger.Info($"{serviceName}服务开启...");
var servicesToRun = new ServiceBase[] { hostService };
ServiceBase.Run(servicesToRun);
#endif
Console.ReadLine();
Main
这个时候,运行,服务就可以启动了。
大概就是这么个效果

二、quart的使用
1.引用
添加引用
Install-Package Quartz
Install-Package Quartz.Plugins
2.添加TestQuartzService .cs 文件,写入以下代码
public class TestQuartzService : IDisposable
{
private ILog Log = LogManager.GetLogger(typeof(TestQuartzService));
public List<IScheduler> Schedulers = new List<IScheduler>();
public void Start()
{
Log.Info("quartz开启!");
// 从工厂中获取调度程序实例
StdSchedulerFactory factory = new StdSchedulerFactory();
IScheduler scheduler = factory.GetScheduler().Result;
Schedulers.Add(scheduler);
scheduler.Start();
Log.Info("quartz开启完成!");
} public void Stop()
{
Log.Info("quartz关闭!");
foreach (var scheduler in Schedulers)
{
scheduler.Shutdown().GetAwaiter().GetResult();
}
Log.Info("quartz关闭完成!");
} public void Dispose()
{
foreach (var scheduler in Schedulers)
{
if (scheduler.IsStarted)
{
scheduler.Shutdown().GetAwaiter().GetResult();
}
}
}
}
TestQuartzService
3.添加TestJob.cs文件
写入以下代码
public class TestJob : IJob
{
private ILog Log = LogManager.GetLogger(typeof(TestJob));
public Task Execute(IJobExecutionContext context)
{
Log.Info("测试job启动");
Console.WriteLine("测试job启动");
return Task.CompletedTask;
}
}
TestJob
4.添加 quartz.config
# You can configure your scheduler in either <quartz> configuration section
# or in quartz properties file
# Configuration section has precedence quartz.scheduler.instanceName = ServerScheduler # configure thread pool info
quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz
quartz.threadPool.threadCount =
quartz.threadPool.threadPriority = Normal # job initialization plugin handles our xml reading, without it defaults are used
quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz.Plugins
quartz.plugin.xml.fileNames = ~/quartz_jobs.xml
quartz.config
5.添加quartz_jobs.xml
<?xml version="1.0" encoding="UTF-8"?>
<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
<processing-directives>
<overwrite-existing-data>true</overwrite-existing-data>
</processing-directives>
<schedule>
<job>
<name>TestJob</name>
<group>TestJobGroup</group>
<description>测试Job</description>
<job-type>TestQuartzService.TestJob,TestQuartzService</job-type>
<durable>true</durable>
<recover>false</recover>
</job>
<trigger>
<cron>
<name>TestJobJobTrigger</name>
<group>TestJobTriggerGroup</group>
<job-name>TestJob</job-name>
<job-group>TestJobGroup</job-group>
<misfire-instruction>DoNothing</misfire-instruction>
<cron-expression>/ * * * * ?</cron-expression>
</cron>
</trigger>
</schedule>
</job-scheduling-data>
quartz_job
6.HostService.cs改为
/// <summary>
/// 服务
/// </summary>
public class HostService : ServiceBase
{
private ILog Log = LogManager.GetLogger(typeof(HostService)); private TestQuartzService _testQuartzService;
/// <summary>
/// Creates an instance of <c>WebHostService</c> which hosts the specified web application.
/// </summary>
/// <param name="host">The configured web host containing the web application to host in the Windows service.</param>
public HostService()
{
_testQuartzService = new TestQuartzService();
} public void Start()
{
Log.Info($"{base.ServiceName}服务开启");
OnStart(null);
} protected sealed override void OnStart(string[] args)
{
OnStarting(args);
//dosomthing
_testQuartzService.Start();
OnStarted();
} protected sealed override void OnStop()
{
Log.Info($"{base.ServiceName}服务关闭");
OnStopping();
try
{
_testQuartzService.Stop();
}
finally
{
OnStopped();
}
} /// <summary>
/// Executes before ASP.NET Core starts.
/// </summary>
/// <param name="args">The command line arguments passed to the service.</param>
protected virtual void OnStarting(string[] args) { } /// <summary>
/// Executes after ASP.NET Core starts.
/// </summary>
protected virtual void OnStarted() { } /// <summary>
/// Executes before ASP.NET Core shuts down.
/// </summary>
protected virtual void OnStopping() { } /// <summary>
/// Executes after ASP.NET Core shuts down.
/// </summary>
protected virtual void OnStopped() { }
}
HostService
6.尝试启动

三、安装为windows服务
1.编辑TestQuartzService.csproj
添加 <RuntimeIdentifier>win-x64-corert</RuntimeIdentifier>

2.Main的引用添加(不添加release会报错,因为使用了 var servicesToRun = new ServiceBase[] { hostService };)
using System.ServiceProcess;
3.点击发布

这下就会在 netcoreapp2.0\win-x64-corert 出现

有了这个exe就可以进行第四步了
4.管理员打开CMD
输入以下
sc create TestQuartzService binpath=E:\liuyue\TestQuartzService\TestQuartzService\bin\Release\netcoreapp2.0\win-x64-corert\TestQuartzService.exe

看到

5、打开服务找到

点启动
看到日志有日志不断输出

四、完结
值得注意一点就是,各种config、xml文件,记得copy always。
到这就弄完了。有什么问自己,翻源码去吧
.Net Core 2.0 的 ConsoleApp 搭建 Quartz(xml配置)windows服务的更多相关文章
- Quartz+TopShelf实现Windows服务作业调度
Quartz:首先我贴出来了两段代码(下方),可以看出,首先会根据配置文件(quartz.config),包装出一个Quartz.Core.QuartzScheduler instance,这是一个调 ...
- 基于.net core 2.0+mysql+AceAdmin搭建一套快速开发框架
前言 .net core已经出来一段时间了,相信大家对.net core的概念已经很清楚了,这里就不再赘述.笔者目前也用.net core做过一些项目,并且将以前framework下的一些经验移植到了 ...
- win10下ASP.NET Core 2.0部署环境搭建(转)
此文用于记录在win10环境下,新建的Asp.net Core 2.0 Web应用项目如何运行在IIS上 一.运行环境 操作系统: Window10 家庭中文版 版本 10.0.15063 版本 15 ...
- Quartz.Net在windows服务中的使用
写在前面 这几天在弄一个项目,需要定时抓取一些数据,当时也想直接用timer算了.因为之前也弄过这样的项目,但是一想,已经用过了,再去使用同一种思路,未免太乏味了.就换了一种新玩法.这里将之前看到的一 ...
- 使用 Topshelf 结合 Quartz.NET 创建 Windows 服务
Ø 前言 之前一篇文章已经介绍了,如何使用 Topshelf 创建 Windows 服务.当时提到还缺少一个任务调度框架,就是 Quartz.NET.而本文就展开对 Quartz.NET 的研究,以 ...
- 利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务
背景 2019第一篇文章. 此文源于前公司在迁移项目到.NET Core的过程中,希望使用Generic Host来管理定时任务程序时,没法部署到Windows服务的问题,而且官方也没给出解决方案,只 ...
- Quartz和TopShelf Windows服务作业调度
上一次写了一遍关于Quartz作业调度的文章 Quartz.NET 作业调度使用 现在使用TopShelf和Quartz实现windows服务作业调度 TopShelf版本4.0 Quartz版本3. ...
- Quartz.net创建windows服务
序言 安装服务 sc create XXService binpath= "XXService.exe" start= auto sc description XXService ...
- servlet3.0以后可以不用web.xml配置了
AbstractDispatcherServletInitializer 注意:删除了web.xml会报错,web.xml is missing and <failOnMissingWebXml ...
随机推荐
- 7_python之路之python计算器
7_python之路之python计算器 1.程序说明:Readme.cmd 1.程序文件及说明: calculator.py 2.python版本:python-3.5.3 3.程序使用:pytho ...
- Xenu Link Sleuth 简单好用的链接测试工具 使用说明
XenuLink Sleuth 名词介绍 “Xenu链接检测侦探”是被广泛使用的死链接检测工具.可以检测到网页中的普通链接.图片.框架.插件.背景.样式表.脚本和java程序中的链接. 那么神马时候出 ...
- python 阿里云短信群发推送
本篇文章是使用Python的Web框架Django提供发送短信接口供前端调用,Python版本2.7 阿里云入驻.申请短信服务.创建应用和模板等步骤请参考:阿里云短信服务入门 1.下载sdk 阿里云短 ...
- LUA 表排序
t = { [] = , [] = , [] = } for k, v in pairs(t) do--注意这个输出顺序是没有规律的!!! print(k, v) end local keys = { ...
- Linux系统下使用ckfinder上传中文名的图片无法正常预览
问题描述:使用ckfinder上传带有中文名称的图片后在Windows本地可以正常预览,部署在Linux系统后,带有中文名的图片不能正常显示 解决办法:找到Tomcat的根目录 --> conf ...
- nginx部署(普通用户)
1. Install Nginx software prerequisites : $ sudo yum install pcre pcre-devel openssl-devel perl gcc ...
- 138. Copy List with Random Pointer (Graph, Map; DFS)
A linked list is given such that each node contains an additional random pointer which could point t ...
- errorlevel 续1
-------siwuxie095 常用 errorlevel 返回值: backup 0 备份成功 1 未找到备份文件 2 文件共享冲突阻止备份完成 3 用户用 ct ...
- 接雨水12 · Trapping Rain Water12
[抄题]: Given n non-negative integers representing an elevation map where the width of each bar is 1, ...
- Entity Framework 6.0 对枚举的支持/实体添加后会有主键反回
实验 直接上代码,看结果 实体类 [Flags] public enum FlagsEnum { Day = , Night = } public class EntityWithEnum { pub ...