在应用程序开发过程中,经常会需要定时任务调度功能,本篇博客介绍Asp.net Core如何使用Quartz完成定时调度

一、Quartz使用步骤

  1. 创建调度器scheduler,并开启
  2. 创建Job作业
  3. 创建tigger触发器
  4. 把作业和触发器放入调度器中

二、Quartz的API

  • IScheduler - 与 scheduler 进行交互的主要接口
  • IJob - 你希望被 scheduler 执行的组件的接口
  • IJobDetail - 用于定义 Jobs 实例
  • ITrigger - 定义将会在scheduler上执行的 job 上的组件
  • JobBuilder - 用于定义或建立(define/build) JobDetail 实例,JobDetail定义了Jobs实例
  • TriggerBuilder - 用于定义或建立 Trigger 实例

三、使用Quartz

1、在使用Quartz之前需添加引用,在程序包管理控制台中执行命令安装依赖包

Install-Package Quartz -Version 3.0.7

2、创建调度类QuartzPro

using Quartz;
using Quartz.Impl;
using System.Collections.Specialized;
using System.Threading.Tasks; namespace Test123
{
public class QuartzPro
{
private IScheduler scheduler;
// 创建调度任务的入口
public async Task Start()
{
await StartJob();
}
// 创建调度任务的公共调用中心
public async Task StartJob()
{
//创建一个工厂
NameValueCollection param = new NameValueCollection()
{
{ "testJob","test"}
};
//创建一个调度器
StdSchedulerFactory factory = new StdSchedulerFactory(param);
scheduler = await factory.GetScheduler();
//开始调度器
await scheduler.Start();
//每三秒打印一个info日志
await CreateJob<StartLogInfoJob>("_StartLogInfoJob", "StartLogInfoJob", " 0/3 * * * * ? ");
//调度时间生成地址 http://cron.qqe2.com
}
// 停止调度
public void Stop()
{
scheduler.Shutdown();
scheduler = null;
}
// 创建运行的调度器
public async Task CreateJob<T>(string name, string group, string cronTime) where T : IJob
{
//创建一个作业
var job = JobBuilder.Create<T>()
.WithIdentity("name" + name, "group" + group)
.Build();
//创建一个触发器
var tigger = (ICronTrigger)TriggerBuilder.Create()
.WithIdentity("name" + name, "group" + group)
.StartNow()
.WithCronSchedule(cronTime)
.Build();
//把作业和触发器放入调度器中
await scheduler.ScheduleJob(job, tigger);
}
}
}

3、创建业务逻辑类StartLogInfoJob

using Quartz;
using System.Threading.Tasks; namespace Test123
{
public class StartLogInfoJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
await Start();
}
public async Task Start()
{
LogHelp.LogTxt("调度打印Info");
}
}
}

4、创建打印日志类LogHelp

using System;
using System.IO;
using System.Text; namespace Test123
{
public class LogHelp
{
public static void LogTxt(string info)
{
string FilePath = Environment.CurrentDirectory + "/LogTxt.txt";
StringBuilder msg = new StringBuilder();
msg.Append("*************************************** \r\n");
msg.AppendFormat(" 打印时间: {0} \r\n", DateTime.Now);
msg.AppendFormat(" 打印内容: {0} \r\n", info);
msg.Append("***************************************");
try
{
if (File.Exists(FilePath))
{
using (StreamWriter tw = File.AppendText(FilePath))
{
tw.WriteLine(msg.ToString());
}
}
else
{
TextWriter tw = new StreamWriter(FilePath);
tw.WriteLine(msg.ToString());
tw.Flush();
tw.Close();
tw = null;
}
}
catch (Exception exx)
{
Console.ReadKey();
}
}
}
}

5、重写控制台应用程序的Program文件

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using QuartzText;
using System;
using System.Linq; namespace Test123
{
class Program
{
static void Main(string[] args)
{
HandleStart();
var webHostArgs = args.Where(arg => arg != "--console").ToArray();
var host = WebHost.CreateDefaultBuilder(webHostArgs)
.UseStartup<Startup>()
.UseKestrel(options =>
{
options.Limits.MinRequestBodyDataRate = null;
})
.Build();
host.Run();
}
static void HandleStart()
{
try
{
new QuartzPro().Start().GetAwaiter().GetResult();
}
catch (Exception ex)
{
throw;
}
}
}
}

日志每隔三秒打印一次

End!

ASP.NET Core使用Quartz定时调度的更多相关文章

  1. Quartz定时调度框架

    Quartz定时调度框架CronTrigger时间配置格式说明 CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年 ...

  2. java 多线程——quartz 定时调度的例子

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  3. Asp.net Core使用Quartz.net

    1.介绍:Quartz.Net主要是用来做一些周期性的工作,或者定时工作.比如每天凌晨2点执行某个方法或者调用某个接口. Quartz项目地址:https://github.com/quartz-sc ...

  4. .NET Core使用Quartz执行调度任务进阶

    一.前言运用场景 Quartz.Net是一个强大.开源.轻量的作业调度框架,在平时的项目开发当中也会时不时的需要运用到定时调度方面的功能,例如每日凌晨需要统计前一天的数据,又或者每月初需要统计上月的数 ...

  5. .NET Core使用Quartz执行调度任务进阶(转)

    一.前言运用场景 Quartz.Net是一个强大.开源.轻量的作业调度框架,在平时的项目开发当中也会时不时的需要运用到定时调度方面的功能,例如每日凌晨需要统计前一天的数据,又或者每月初需要统计上月的数 ...

  6. Spring Quartz定时调度任务配置

    applicationContext-quartz.xml定时调度任务启动代码: <?xml version="1.0" encoding="UTF-8" ...

  7. Quartz定时调度jar包的执行Demo分享

    1.Quartz简介 ​ Quartz框架的核心是调度器.调度器负责管理Quartz应用运行时环境.调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件.Quartz不仅仅是线程和线程管理. ...

  8. quartz 定时调度持久化数据库配置文件

    1 下载quartz对应版本jar包 2 初始化对应数据库sql(版本需要对应,不然会出现少字段的情况) ,下载地址  https://github.com/quartz-scheduler/quar ...

  9. Quartz定时调度

    测试类 import static org.quartz.JobBuilder.newJob; import static org.quartz.TriggerBuilder.newTrigger; ...

随机推荐

  1. src和href 如何做好seo 前端页面有那三层 AMD和CMD 规范的区别 渐进增强

    1==>简述一下src与href的区别 src用于替换当前元素: href用于在当前文档和引用资源之间确立联系 2==>.谈谈以前端角度出发做好SEO需要考虑什么? a. 了解搜索引擎如何 ...

  2. mysql字段约束-索引-外键---3

    本节所讲内容: 字段修饰符 清空表记录 索引 外键 视图 一:字段修饰符 (约束) 1:null和not null修饰符   我们通过这个例子来看看 mysql> create table wo ...

  3. 怎么安装python3

    解压  这个压缩包 2.把解压后的python文件夹所在的路径配置到环境变量 3.鼠标移动到计算机上---右键---属性----高级系统设置---环境变量,打开如下界面    4.在系统变量里选择pa ...

  4. Java高级-反射

    1.如何创建Class的实例 1.1过程:源文件经过编译(javac.exe)以后,得到一个或者多个.class文件..class文件经过运行(java.exe)这步,就需要进行类的加载(通过JVM的 ...

  5. c语言命名规范图

    来自armbbs

  6. 如何禁用Antimalware Service Executable

    有时发现风扇呼呼地转,查看任务管理器,发现其中antimalware service executable占用了大量的CPU和内存. 这是由于Windows Defender软件导致的,可以用如下方法 ...

  7. 2.第一个Vue程序

    1.IDEA中安装Vue.js插件 2.建立项目以及html文件 1.创建一个 HTML 文件 2.引入 Vue.js <script src="https://cdn.jsdeliv ...

  8. python中使用rsa加密

    前提不多说, 为什么使用RSA加密请自行搜索,直接正为: 一. 生成公钥及私钥, 并保存 二. 使用公钥加密, 私钥解密 后记: 通常使用中, 会先对数据进行bas64加密, 再对加密后的内容使用rs ...

  9. 认识beanstalkd

    认识beanstalkd 背景  公司业务做某个需求是将数据写入到消息队列中,然后另外一个服务来消费数据,这里的消息队列使用的是beastalkd,之前接触到的消息队列为kafka,因此简单学习记录一 ...

  10. SpringBoot第十篇:thymeleaf详解

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10931435.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   Sprin ...