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++面试基础
自己整理了一些常见的面试题,频率挺高的都是,而且感觉这里这些基础的东西都会问,自己过几天也要面试了,所以发上来让大家一起看看,有什么错误的地方望提醒我纠正. 32位数据类型以及sizeof大小. ch ...
- 使用Oracle(SQL Plus)
error: connection as sys should be as SYSDBA or SYSOPER 用户名 :sys 密码: 自己设定的database:ORCLconnect as : ...
- C# 给图片添加透明的文字、图片水印
#region 添加水印 /// <summary> /// 添加文字水印 /// </summary> /// <param name="image" ...
- C#中实现UrlEncode和UrlDecode
有时需要进行url编码.解码,比如从html中捞数据,有可能>.&等字符会被编码成>等. WinForm中默认没有引入System.Web,因此要现在项目中引入依赖 System. ...
- 定时器timer类
timer类 Timer(定时器)是Thread的派生类,用于在指定时间后调用一个方法. 构造方法: Timer(interval, function, args=[], kwargs={}) in ...
- ### 20165219 2017-2018-2《Java程序设计》结对编程一 第二周总结
20165219 2017-2018-2<Java程序设计>结对编程一 第二周总结 结对对象 20165219王彦博 20165232何彦达 需求分析 实现一个程序,要求: 1 支持整数运 ...
- 【转】C# datagridview大小跟随窗口动态改变
源地址:https://blog.csdn.net/fengxing11/article/details/52527715
- 在CentOS-6.3环境下,利用grub工具手工制作Linux U盘安装盘
注:此文是本人亲自操作实现后写的心得,同时也是对自己操作的记录. 制作的全过程概况 准备工作: U盘重新分区: 格式化U盘: 安装grub文件到U盘特定的分区: 拷贝镜像中的相关文件到U盘: 安装时设 ...
- maven设置------settings.xml文件学习
https://blog.csdn.net/tomato__/article/details/13025187 快速预览 maven的配置文件为settings.xml,在下面路径中可以找到这个文件, ...
- 数据结构实验之图论七:驴友计划 ( 最短路径 Dijkstra 算法 )
数据结构实验之图论七:驴友计划 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Probl ...