Quartz和TopShelf Windows服务作业调度
上一次写了一遍关于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();
}
配置安装服务

参考:https://topshelf.readthedocs.io/en/latest/configuration/config_api.html#service-name
Quartz和TopShelf Windows服务作业调度的更多相关文章
- Quartz+TopShelf实现Windows服务作业调度
Quartz:首先我贴出来了两段代码(下方),可以看出,首先会根据配置文件(quartz.config),包装出一个Quartz.Core.QuartzScheduler instance,这是一个调 ...
- 使用 Topshelf 结合 Quartz.NET 创建 Windows 服务
Ø 前言 之前一篇文章已经介绍了,如何使用 Topshelf 创建 Windows 服务.当时提到还缺少一个任务调度框架,就是 Quartz.NET.而本文就展开对 Quartz.NET 的研究,以 ...
- Quartz.Net在windows服务中的使用
写在前面 这几天在弄一个项目,需要定时抓取一些数据,当时也想直接用timer算了.因为之前也弄过这样的项目,但是一想,已经用过了,再去使用同一种思路,未免太乏味了.就换了一种新玩法.这里将之前看到的一 ...
- Quartz.net创建windows服务
序言 安装服务 sc create XXService binpath= "XXService.exe" start= auto sc description XXService ...
- topshelf windows服务
一 开发: 1.新建控制台程序 2.nuget下载topshelf,根据不同的net版本选择下载版本,本人4.5下载3.3.1 3.main方法中增加 HostFactory.Run(x => ...
- 子线程导致 Windows 服务停止的情况(Topshelf 结合 Quartz.NET)
Ø 前言 本文主要记录子线程导致 Topshelf 和 Quartz.NET 的 Windows 服务停止的现象,以及使用几种常用子线程的注意事项.因为我们有时可能需要开启多个线程执行复杂的逻辑,如 ...
- Quartz.NET Windows 服务示例
想必大家在项目中处理简单的后台持续任务或者定时触发任务的时候均使用 Thread 或者 Task 来完成,但是项目中的这种需求一旦多了的话就得将任务调度引入进来了,那今天就简单的介绍一下 Quartz ...
- 关于使用Topshelf创建服务
目录 0. 背景说明 1. 使用Topshelf组件创建Windows服务 1.1 依赖Quartz.net实现定时任务 1.2 依赖于Topshelf创建服务类 1.3 log4net的配置文件lo ...
- Quartz.NET+Topshelf 创建Windows服务
由于项目开发中经常会有定时任务执行的需求,所以会第一时间就想到 windows 服务 的方式,但是做过开发的同学都知道windows服务不利于调试,安装也麻烦: 并且有开源的作业框架Quartz.NE ...
随机推荐
- C# winform中Setting.settings 相关知识点
1.在Settings.settings文件中定义配置字段.包含字段名.类型.范围.值四部分的属性. 字段名.类型和值类似编程中字段的定义一样使用,不再过多的解释.重点讲一下”范围“字段的含义与区别. ...
- (转)Expression 表达式树学习整理
原文地址:http://www.cnblogs.com/li-peng/p/3154381.html 整理了一下表达式树的一些东西,入门足够了 先从ConstantExpression 开始一步一步的 ...
- (转)关于Update语句的锁
原文地址:http://www.cnblogs.com/wdfrog/p/3144020.html 环境:MSSQL2005,在Read Committed级别 语句A:begin tranUpdat ...
- <%@ include > 与< jsp:include >
include指令表示在JSP编译时插入一个包含文本或者代码的文件,把文件中的文本静态地包含过去.也就是说,会把被包含的页面拷贝到包含的页面中指令所在的位置. 语法格式:<%@ include ...
- javaScript入门之常用事件
JS中的常用事件 onfocus/onblur:聚焦离焦事件,用于表单校验的时候比较合适. onclick/ondblclick:鼠标单击和双击事件 onkeydown/onkeypress:搜索引擎 ...
- 三、Node.js-HelloWorld案例
之前我们编写的JavaScript代码都是在浏览器中运行的,因此,我们可以直接在浏览器中敲代码,然后直接运行. 在Node,我们编写的JavaScript代码将不能在浏览器环境中执行了,而是在Node ...
- Kotlin 函数
至于什么函数,在计算机里面就是一个密闭的执行程序的代码块(个人理解) 我们先来看看什么是函数 fun main(agrs : Array<String>) { println(" ...
- 已经上架的app在AppStore上搜不到的解决办法
1.问题呈现 相信很多人都遇到过这个问题,天天刷iTunes connect,终于发现app已经上架了,兴奋的跑过去告诉老板,老板说好,大家都装一个吧! 这时候只能一边不慌不忙地甩锅给苹果,一边快马加 ...
- 洛谷P2287 [HNOI2004]最佳包裹(三维凸包)
题面 传送门 题解 左转板子,调个精度就能\(A\)了 //minamoto #include<bits/stdc++.h> #define R register #define fp(i ...
- Thinkphp5.0 路由
路由定义: 有两种方式: (1).动态注册: eg: Route::rule('hello','index/index/hello','GET'); (2)配置式: eg: return [ 'pat ...