该文章是系列文章 基于.NetCore和ABP框架如何让Windows服务执行Quartz定时作业 的其中一篇。

Quartz是一个开源的作业调度框架,准确的称谓应该是 Quartz.Net,它是Java开源项目Quartz Scheduler的一部分。

关于Quartz的功能可访问 https://www.quartz-scheduler.net/features.html

nuget地址:https://www.nuget.org/packages/Quartz/3.0.7/

GitHub地址:https://github.com/quartznet/quartznet

首先是对定义的MyJobService进行完善。

using System.Threading.Tasks;

namespace Demo.MyJob
{
public class MyJobService
{
public async Task StartAsync()
{
//操作逻辑
} public async Task StopAsync()
{
//操作逻辑
} public async Task ContinueAsync()
{
//操作逻辑
} public async Task PauseAsync()
{
//操作逻辑
}
}
}

完善之后的代码如下

using System.Threading.Tasks;
using Quartz;
using Quartz.Impl; namespace Demo.MyJob
{
public class MyJobService
{
private readonly Task<IScheduler> _defaultScheduler;
private static IScheduler _scheduler;
public MyJobService()
{
_defaultScheduler = StdSchedulerFactory.GetDefaultScheduler();
}
public async Task StartAsync()
{
_scheduler = await _defaultScheduler;
await _scheduler.Start();
} public async Task StopAsync()
{
await _scheduler.Shutdown();
} public async Task ContinueAsync()
{
await _scheduler.ResumeAll();
} public async Task PauseAsync()
{
await _scheduler.PauseAll();
}
}
}

IScheduler是主要的接口,它由ISchedulerFactory生成,StdSchedulerFactory继承自ISchedulerFactoryStdSchedulerFactory获取配置的顺序是先从App.config查找quartz section,没找到就查找文件名为quartz.config的配置,如果再没有,代码内置的有默认的配置项。

使用XML文件配置

quartz.config的简略配置如下

quartz.scheduler.instanceName = QuartzTest
quartz.threadPool.threadCount = 10
quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz.Plugins
quartz.plugin.xml.fileNames = ~/quartz_jobs.xml
  • quartz.scheduler.instanceName - 此调度程序的名称将为“QuartzTest”,如果没配置,默认名称是“QuartzScheduler”
  • quartz.threadPool.threadCount - 最多可同时运行10个作业,如果现在有超过10个job需要执行的话,不会报错,但是将有job不能执行。
  • quartz.plugin.xml.type和quartz.plugin.xml.fileNames需要新加nuget包Quartz.Plugins,指定了配置job详情的xml文件,该文件与quartz.config在同级目录下。

注意:新增了三个文件,分别是job_scheduling_data_2_0.xsd、quartz.config、quartz_jobs.xml,文件属性为如果较新则复制

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>SayHelloJob</name>
<group>SayHelloJobGroup</group>
<description>SayHello</description>
<job-type>Demo.MyJob.Jobs.SayHelloJob,Demo.MyJob</job-type>
<durable>true</durable>
<recover>false</recover>
</job>
<trigger>
<cron>
<name>SayHelloJobTrigger</name>
<group>SayHelloJobGroup</group>
<description>SayHello</description>
<job-name>SayHelloJob</job-name>
<job-group>SayHelloJobGroup</job-group>
<start-time>2019-06-13T00:00:00+08:00</start-time>
<cron-expression>0 30 1 * * ?</cron-expression>
</cron>
</trigger>
</schedule>
</job-scheduling-data>

job-type标识加载SayHelloJob的名称,要指定正确不然报错。更多配置可以参考:Quartz.Tests.Integration/Xml/TestData

实现Job

详细文档地址:https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/index.html

IScheduler.Start(System.Threading.CancellationToken)调用之后将启动实现的Job,该Job必须继承IJob,执行的操作放在实现的Execute方法中,该方法标识了Task,也就是说我们可以在Execute方法内调用同步方法或者异步方法。

using System;
using System.Threading.Tasks;
using Quartz; namespace Demo.MyJob.Jobs
{
class SayHelloJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
await Task.Run(() =>
{
Console.WriteLine("Hello World to Async!");
});
Console.WriteLine("Hello World!");
}
}
}

使用Quartz实现定时作业的更多相关文章

  1. Spring3整合Quartz实现定时作业

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...

  2. 基于.NetCore和ABP框架如何让Windows服务执行Quartz定时作业

    demo地址:ABP.WindowsService 该系列文章启发自 How to: Create a Windows Service that schedules jobs, logs and is ...

  3. 用abp vNext快速开发Quartz.NET定时任务管理界面

    今天这篇文章我将通过实例代码带着大家一步一步通过abp vNext这个asp.net core的快速开发框架来进行Quartz.net定时任务调度的管理界面的开发.大伙最好跟着一起敲一下代码,当然源码 ...

  4. SpringBoot2.x集成Quartz实现定时任务管理(持久化到数据库)

    1. Quartz简介   Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目.   Quartz是一个完全由Java编写的开源作业调度框架,为在Java应 ...

  5. SQLServer2005创建定时作业任务

    SQLServer定时作业任务:即数据库自动按照定时执行的作业任务,具有周期性不需要人工干预的特点 创建步骤:(使用最高权限的账户登录--sa) 一.启动SQL Server代理(SQL Server ...

  6. sqlSQL2008如何创建定时作业

    SQL2008如何创建定时作业?此方法也适应于Sql Server2005数据库,有兴趣的可以来看下! 1.打开[SQL Server Management Studio],在[对象资源管理器]列表中 ...

  7. sqlSQL2008如何创建定时作业(代理服务)(转)

    SQL2008如何创建定时作业?此方法也适应于Sql Server2005数据库,有兴趣的可以来看下! 1.打开[SQL Server Management Studio],在[对象资源管理器]列表中 ...

  8. SQL Server 2008 定时作业的制定(SQL2005参考此方法) 转

    --  Author : htl258(Tony)--  Date   : 2010-04-29 19:07:45--  Version:Microsoft SQL Server 2008 (RTM) ...

  9. 实习笔记-1:sql 2008r2 如何创建定时作业

    在公司实习了近一个月,学了很多东西.这一篇是一些比较基础的东西,本人是小菜鸟,不喜欢大神来喷.大神欢迎出门点右上角.谢谢~ 说大实话,对于数据库,我在还没出来实习的时候就是只懂写一些sql语句以及知道 ...

随机推荐

  1. navicat 无法连接到腾讯云Mysql

    远程连接进入服务器 远程连接进入服务器之后,输入命令mysql -u root -p 之后输入mysql密码,进入mysql 命令环境 设置开启远程登录 GRANT ALL PRIVILEGES ON ...

  2. Spring教程:tutorialspoint-spring

    来自turorialspoint的Spring教程(英文),官网:https://www.tutorialspoint.com/spring/index.htm 这个教程在国内已经被翻译成中文(不过是 ...

  3. 【LeetCode】Swap Nodes in Pairs 链表指针的应用

    题目:swap nodes in pairs <span style="font-size:18px;">/** * LeetCode Swap Nodes in Pa ...

  4. SGU - 311 Ice-cream Tycoon(线段树)

    Description You've recently started an ice-cream business in a local school. During a day you have m ...

  5. 【Mongodb教程 第十课 】MongoDB 备份

    MongoDB 数据转储 创建备份MongoDB中的数据库,应该使用mongodump命令.此命令将服务器的所有数据转储到转储目录.有许多可供选择,通过它可以限制的数据量或创建备份您的远程服务器. 语 ...

  6. sqlserver中All、Any和Some用法与区别

    转自:http://blog.csdn.net/gyc1105/article/details/8063624 SQLServer中有三个关键字可以修改比较运算符:All.Any和Some,其中Som ...

  7. iOS 开发小常识 开发笔记

    一   自定义push方法 /*  参数说明 *  controllerName : push的目标页 例:@“testcontroll”    ---注意不带.h *  isNibPage     ...

  8. serverSpeed是一个android手机端到服务器间udp/tcp对比测速软件

    https://github.com/eltld/serverSpeed https://github.com/c-wind/serverSpeed https://github.com/PeterK ...

  9. Hackrank Candies DP

    题目链接:传送门 题意: n个学生站一行,老师给每个学生发至少一个糖 相邻学生,a[i] > a[i-1] 的话,那么右边学生的糖一定要发得比左边学生的糖多 问你满足条件这个老师总共最少的发多少 ...

  10. 【bzoj3224】Tyvj 1728 普通平衡树

    交了一发pb_ds #include<ext/pb_ds/assoc_container.hpp> #include<algorithm> #include<iostre ...