ASP.NET Core使用Quartz定时调度
在应用程序开发过程中,经常会需要定时任务调度功能,本篇博客介绍Asp.net Core如何使用Quartz完成定时调度
一、Quartz使用步骤
- 创建调度器scheduler,并开启
- 创建Job作业
- 创建tigger触发器
- 把作业和触发器放入调度器中
二、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定时调度的更多相关文章
- Quartz定时调度框架
Quartz定时调度框架CronTrigger时间配置格式说明 CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年 ...
- java 多线程——quartz 定时调度的例子
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- Asp.net Core使用Quartz.net
1.介绍:Quartz.Net主要是用来做一些周期性的工作,或者定时工作.比如每天凌晨2点执行某个方法或者调用某个接口. Quartz项目地址:https://github.com/quartz-sc ...
- .NET Core使用Quartz执行调度任务进阶
一.前言运用场景 Quartz.Net是一个强大.开源.轻量的作业调度框架,在平时的项目开发当中也会时不时的需要运用到定时调度方面的功能,例如每日凌晨需要统计前一天的数据,又或者每月初需要统计上月的数 ...
- .NET Core使用Quartz执行调度任务进阶(转)
一.前言运用场景 Quartz.Net是一个强大.开源.轻量的作业调度框架,在平时的项目开发当中也会时不时的需要运用到定时调度方面的功能,例如每日凌晨需要统计前一天的数据,又或者每月初需要统计上月的数 ...
- Spring Quartz定时调度任务配置
applicationContext-quartz.xml定时调度任务启动代码: <?xml version="1.0" encoding="UTF-8" ...
- Quartz定时调度jar包的执行Demo分享
1.Quartz简介 Quartz框架的核心是调度器.调度器负责管理Quartz应用运行时环境.调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件.Quartz不仅仅是线程和线程管理. ...
- quartz 定时调度持久化数据库配置文件
1 下载quartz对应版本jar包 2 初始化对应数据库sql(版本需要对应,不然会出现少字段的情况) ,下载地址 https://github.com/quartz-scheduler/quar ...
- Quartz定时调度
测试类 import static org.quartz.JobBuilder.newJob; import static org.quartz.TriggerBuilder.newTrigger; ...
随机推荐
- 解析YAML文件
YamlMapFactoryBean yamlMapFactoryBean = new YamlMapFactoryBean(); yamlMapFactoryBean.setResources(ne ...
- maven配置阿里云国内仓库
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http:/ ...
- n8n 基于node 的流程自动化工具
n8n 是基于node开发的流程自动化工具,提供了可视化的操作,我们可以用来集成不同的服务. 目前已经提供了很多的服务集成组件,同时我们也可以方便的自己扩展,后边会进行一个系统的 学习,同时介绍下使用 ...
- day 29
Let the dead have the immortality of fame, but the living the immortality of love. 让逝者拥有不朽的荣誉,让生者拥有不 ...
- JOI2013-2019题解
JOI2013-2019题解 Link
- Git分支的介绍及Gitlab的部署
Git分支介绍几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线.Git 处理分支的方式可谓是难以置信的轻量,创建新分支这一操作几乎能在 ...
- [LeetCode] 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
Given a string S of '(' and ')' parentheses, we add the minimum number of parentheses ( '(' or ')', ...
- apache2 不支持php文件 解决办法
一.修改apache配置文件 vim /usr/local/apache2/conf/httpd.conf 1.在此加上index.php <IfModule dir_module> Di ...
- python 编码(encode)解码(decode)问题
s = '匆匆'print(s)s1 = s.decode("utf-8") # utf-8 转成 Unicode,decode(解码)需要注明当前编码格式print(s1,typ ...
- MAC版本的UltraEdit破解方法
MAC版本的UltraEdit破解方法: 解压,然后在命令行里输入 printf '\x31\xC0\xFF\xC0\xC3\x90' | dd seek=$((0x777160)) conv=not ...