上一次写了一遍关于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

最新文章

  1. android Service介绍
  2. CentOS 6/7安装ffmpeg
  3. iOS开发:正则表达式
  4. Ajax&amp;json
  5. oracle中SET DEFINE意思
  6. LeetCode 1 Two Sum 解题报告
  7. HackPorts – Mac OS X 渗透测试框架与工具
  8. Android应用开发学习之相对布局
  9. redundant 行记录格式
  10. git 基本命令 (常用)
  11. 【基础教程】推荐10+必备的 WordPress 常用插件
  12. [原] 细说 NUMA
  13. 一步操作配置Word环境
  14. Hibernate查询对象的方法浅析
  15. Springmvc 并发访问的线程安全性问题
  16. js string和number
  17. RedisCacheManager设置Value序列化器技巧
  18. Windows环境下安装PIL(Python Imaging Library)库
  19. 解决nginx转发websocket报400错误
  20. web service 部 分

热门文章

  1. LightOJ 1079 Just another Robbery (01背包)
  2. 前端mock利器:randomjson
  3. iOS编程——Objective-C KVO/KVC机制[转]
  4. String类的subtring(,)
  5. Tomcat与Web.xml配置
  6. Arduino I2C + 数字式环境光传感器BH1750FVI
  7. spring (1)
  8. 为什么要使用MQ消息中间件?
  9. 初学python-字符串中引号的使用、input简介、强制类型转换、加减乘除简写、条件判断
  10. oracle取order by的第一条数据