asp.net core mvc 使用quartz
参照了:https://www.cnblogs.com/dangzhensheng/p/10496278.html
1.新建任务类ReportJob.cs,这个类里就是具体任务了。
using Quartz;
using System;
using System.IO;
using System.Threading.Tasks; namespace WebApplication1.MyQuartzJob
{ /// <summary>
/// 具体任务类
/// </summary>
[DisallowConcurrentExecution]
public class ReportJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
return Task.Run(() =>
{
foo();
});
} public void foo()
{
try
{
string root = Directory.GetCurrentDirectory();
string logDir = Path.Combine(root, "Logs");
logDir = Path.Combine(logDir, DateTime.Now.ToString("yyyy-MM"));
var reportDirectory = logDir; if (!Directory.Exists(reportDirectory))
{
Directory.CreateDirectory(reportDirectory);
}
var dailyReportFullPath = Path.Combine(reportDirectory, DateTime.Now.ToString("yyyy-MM-dd")+".txt");
var logContent = string.Format("{0}==>>{1}{2}", DateTime.Now, "create new log.", Environment.NewLine);
File.AppendAllText(dailyReportFullPath, logContent); }
catch (Exception ex)
{
//日志
}
}
}
}
foo() 方法就是想要做的任务。
2.新建QuartzFactory类,这个类复制粘贴就行。
using Quartz;
using Quartz.Spi;
using System; namespace WebApplication1.MyQuartzJob
{
/// <summary>
/// 工厂,复制就行
/// </summary>
public class QuartzFactory : IJobFactory
{
private readonly IServiceProvider _serviceProvider; public QuartzFactory(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
} public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
var jobDetail = bundle.JobDetail; var job = (IJob)_serviceProvider.GetService(jobDetail.JobType);
return job;
} public void ReturnJob(IJob job)
{
}
}
}
3.新建QuartzService类,本类用来定时,和对IServiceCollection进行配置。
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Quartz;
using Quartz.Impl;
using Quartz.Spi;
using System;
using System.Collections.Generic;
using System.Linq; namespace WebApplication1.MyQuartzJob
{
/// <summary>
/// 制定任务,配置IServiceCollection
/// </summary>
public static class QuartzService
{
#region 单任务
public static void StartJob<TJob>() where TJob : IJob
{ string thisJob = "ReportJob"; string groupName = "gp" + thisJob;
string jobName = "job" + thisJob;
string triggerName = "trigger" + thisJob; var scheduler = new StdSchedulerFactory().GetScheduler().Result; var job = JobBuilder.Create<TJob>()
.WithIdentity(jobName, groupName)
.Build(); var trigger1 = TriggerBuilder.Create()
.WithIdentity(triggerName, groupName)
.StartNow()
.WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever())
.ForJob(job)
.Build(); scheduler.AddJob(job, true);
scheduler.ScheduleJob(job, trigger1);
scheduler.Start();
}
#endregion #region 多任务
public static void StartJobs<TJob>() where TJob : IJob
{
var scheduler = new StdSchedulerFactory().GetScheduler().Result; var job = JobBuilder.Create<TJob>()
.WithIdentity("jobs")
.Build(); var trigger1 = TriggerBuilder.Create()
.WithIdentity("job.trigger1")
.StartNow()
.WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(5)).RepeatForever())
.ForJob(job)
.Build(); var trigger2 = TriggerBuilder.Create()
.WithIdentity("job.trigger2")
.StartNow()
.WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(11)).RepeatForever())
.ForJob(job)
.Build(); var dictionary = new Dictionary<IJobDetail, IReadOnlyCollection<ITrigger>>
{
{job, new HashSet<ITrigger> {trigger1, trigger2}}
}; scheduler.ScheduleJobs(dictionary, true);
scheduler.Start();
}
#endregion #region 配置
public static void AddQuartz(this IServiceCollection services, params Type[] jobs)
{
services.AddSingleton<IJobFactory, QuartzFactory>();
services.Add(jobs.Select(jobType => new ServiceDescriptor(jobType, jobType, ServiceLifetime.Singleton))); services.AddSingleton(provider =>
{
var schedulerFactory = new StdSchedulerFactory();
var scheduler = schedulerFactory.GetScheduler().Result;
scheduler.JobFactory = provider.GetService<IJobFactory>();
scheduler.Start();
return scheduler;
});
}
#endregion }
}
StartJob 是制定任务,AddQuartz 配置IServiceCollection。
4.在Startup.cs中注册代码
(a) 在public void ConfigureServices(IServiceCollection services) 方法尾部添加一行:services.AddQuartz(typeof(ReportJob));
public void ConfigureServices(IServiceCollection services)
{
// 。。。。 services.AddQuartz(typeof(ReportJob));
}
注意要引用QuartzService类的命名空间。
(b)在 public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 方法尾部添加一行:QuartzService.StartJob<ReportJob>();
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//.... QuartzService.StartJob<ReportJob>();
}
5. F5 运行。
asp.net core mvc 使用quartz的更多相关文章
- ASP.NET Core MVC/WebAPi 模型绑定探索
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- ASP.NET Core MVC 配置全局路由前缀
前言 大家好,今天给大家介绍一个 ASP.NET Core MVC 的一个新特性,给全局路由添加统一前缀.严格说其实不算是新特性,不过是Core MVC特有的. 应用背景 不知道大家在做 Web Ap ...
- ASP.NET Core MVC 中的 [Controller] 和 [NonController]
前言 我们知道,在 MVC 应用程序中,有一部分约定的内容.其中关于 Controller 的约定是这样的. 每个 Controller 类的名字以 Controller 结尾,并且放置在 Contr ...
- ASP.NET Core 中文文档 第二章 指南(2)用 Visual Studio 和 ASP.NET Core MVC 创建首个 Web API
原文:Building Your First Web API with ASP.NET Core MVC and Visual Studio 作者:Mike Wasson 和 Rick Anderso ...
- ASP.NET Core 中文文档 第二章 指南(4.1)ASP.NET Core MVC 与 Visual Studio 入门
原文:Getting started with ASP.NET Core MVC and Visual Studio 作者:Rick Anderson 翻译:娄宇(Lyrics) 校对:刘怡(Alex ...
- ASP.NET Core 中文文档 第四章 MVC(01)ASP.NET Core MVC 概览
原文:Overview of ASP.NET Core MVC 作者:Steve Smith 翻译:张海龙(jiechen) 校对:高嵩 ASP.NET Core MVC 是使用模型-视图-控制器(M ...
- ASP.NET Core MVC TagHelper实践HighchartsNET快速图表控件-开源
ASP.NET Core MVC TagHelper最佳实践HighchartsNET快速图表控件支持ASP.NET Core. 曾经在WebForms上写过 HighchartsNET快速图表控件- ...
- ASP.NET Core MVC 在linux上的创建及发布
前言 ASP.NET core转眼都发布半月多了,社区最近也是非常活跃,虽然最近从事python工作,但也一直对.NET念念不忘,看过了园区大神们搭建的Asp.net core项目之后,自己也是跃跃欲 ...
- ASP.NET Core - ASP.NET Core MVC 的功能划分
概述 大型 Web 应用比小型 Web 应用需要更好的组织.在大型应用中,ASP.NET MVC(和 Core MVC)所用的默认组织结构开始成为你的负累.你可以使用两种简单的技术来更新组织方法并及时 ...
- 解决ASP.NET Core Mvc文件上传限制问题
一.简介 在ASP.NET Core MVC中,文件上传的最大上传文件默认为20MB,如果我们想上传一些比较大的文件,就不知道怎么去设置了,没有了Web.Config我们应该如何下手呢? 二.设置上传 ...
随机推荐
- 压测场景下的 TIME_WAIT 处理
简介: 压测场景下的 TIME_WAIT 处理 1. 序 某专有云项目具备压测场景,在Windows的压测机上用 LoadRunner 进行业务的压力测试,压测运行一段时间后出现大量端口无法分配的报错 ...
- Flow vs Jenkins 实操对比,如何将Java应用快速发布至ECS
简介:Jenkins 由于其开源特性以及丰富插件能力,长久以来都是中小企业搭建 CICD 流程的首选.不过 Jenkins 存在维护成本高.配置复杂等缺点,云效 Flow 较好地解决了这些问题. 本 ...
- 微信不再提供小程序打开App?借助H5为App引流的方式你必须知道!
简介: 2021年5月14日App开发者领域发布了一条重要消息:微信开放平台为了提升用户体验,将于2021年5月20日(后来延期到2021年5月27日)起不再提供"小程序打开App技术服务& ...
- [GPT] php 报错 Unsupported operand types
Unsupported operand types 这个错误通常发生在使用了不支持的操作数类型时.例如,当您尝试对两个不同类型的值执行算术运算时,就会出现这个错误. 例如,如果您尝试将字符串与数字相加 ...
- [Gin] 传统 for 循环中的语义通用化,在 golang 中使用分号 ; 替代 && 流程控制
// gin.go // HandlerFunc defines the handler used by gin middleware as return value. type HandlerFun ...
- WPF 简单判断主线程界面是否卡顿的方法
本文来告诉大家如何使用简单的代码判断当前的软件的 UI 线程或界面是否卡顿 在后台线程调用如下代码即可用来判断是否卡顿 private static async Task<bool> Ch ...
- Raft 共识算法3-日志复制
Raft 共识算法3-日志复制 Raft算法中译版地址:https://object.redisant.com/doc/raft中译版-2023年4月23日.pdf 英原论文地址:https://ra ...
- 5.prometheus监控--监控nginx
1.监控程序环境准备 mkdir /data/docker-compose -p cd /data/docker-compose cat > docker-compose.yaml <&l ...
- vue下获得经纬度省市区
1.根目录html文件引入 <!--引入百度 API,"ak=" 后面一串码是密钥,最好自己申请--> <script type="text/javas ...
- Python多线程编程深度探索:从入门到实战
title: Python多线程编程深度探索:从入门到实战 date: 2024/4/28 18:57:17 updated: 2024/4/28 18:57:17 categories: 后端开发 ...