1.添加Quartz定时器组件

2.新建类库项目Wsk.Core.QuartzNet,并且引用包类库项目。然后新建一个中间调度类,叫QuartzMiddleJob

3.新建一个Job工厂类,叫YsqJobFactory,用来获取刚刚创建的中间调度类的服务

4.新建一个通用执行计划类,叫YsqJobSchedule,用于每次任务都通过该计划进行生成

5.现在添加一个任务,新建任务类 MyJobs,并且继承自IJob,然后在Excute方法里面,就是该任务执行调度时候会进去执行的了

6.将任务注册到Autofac中

7.编写Program类

点击查看代码
var builder = WebApplication.CreateBuilder(args);

#region 向容器中添加服务
// **1. 初始化日志配置(优先执行)**
// 日志需要尽早配置,确保后续的服务、管道启动时能记录日志
AppHelper.Init(builder.Configuration);
builder.Host.UseSerilog((context, services, configuration) =>
{
configuration.ReadFrom.Configuration(context.Configuration);
}); // **2. 注册原生服务(AddXxx 服务)**
// 原生服务注册优先,便于 Autofac 接管时完整保留这些服务
builder.Services.AddControllers(); // 添加控制器支持
builder.Services.AddEndpointsApiExplorer(); // 添加终结点支持
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Title = "API 文档标题",
Version = "1.0",
Description = "这是 API 文档描述"
});
var xmlFile = Path.Combine(AppContext.BaseDirectory, "Ysq.Core.xml");
c.IncludeXmlComments(xmlFile, true);
}); // **3. 配置 Hangfire 服务**
// 必须在 Autofac 配置之前注册,因为其服务会被转移到 Autofac 中
HangfireConfigInfo.ConnectionString = AppHelper.Instance.ReadAppSettings(new[] { "Hangfire", "Config", "ConnectionString" });
HangfireConfigInfo.Db = Convert.ToInt32(AppHelper.Instance.ReadAppSettings(new[] { "Hangfire", "Config", "Db" }));
builder.Services.AddHangfire(config =>
{
config.UseStorage(new RedisStorage(
HangfireConfigInfo.ConnectionString,
new RedisStorageOptions
{
Db = HangfireConfigInfo.Db,
FetchTimeout = TimeSpan.FromMilliseconds(30)
}));
});
builder.Services.AddHangfireServer(); // 注册 Hangfire 后台任务 // **4. 替换 DI 容器为 Autofac**
// 在所有原生服务注册之后执行,便于 Autofac 接管完整的服务注册
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
{
containerBuilder.RegisterModule(new AutofacRegister()); // 在 Autofac 中注册自定义服务
}); // **5. 注册 Hosted Service(Quartz.NET 或其他后台服务)**
// 注册 Quartz.NET 的 HostedService,此时依赖已全部就绪
builder.Services.AddHostedService<YsqJobHostService>();
#endregion // **6. 构建应用**
var app = builder.Build(); #region 配置HTTP请求管道 // **7. 配置中间件管道**
// 按照 ASP.NET Core 的推荐顺序配置中间件
app.UseSerilogRequestLogging(options =>
{
options.MessageTemplate = "HTTP {RequestMethod} {RequestPath} responded {StatusCode} in {Elapsed:0.0000}ms";
}); app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
IgnoreAntiforgeryToken = true,
DashboardTitle = "Hangfire 任务监控面板",
AsyncAuthorization = new[] { new MyHangfireFilter() },
IsReadOnlyFunc = _ => true // 设置面板为只读
}); // 启用 Swagger 文档
app.UseSwagger();
app.UseSwaggerUI(); // **8. 配置终端点映射**
// 必须在中间件管道之后配置终端点
if (!app.Environment.IsDevelopment())
{
builder.WebHost.UseUrls("http://*:35678");//指定监听端口号
} // 启用授权中间件
app.UseAuthorization(); // **8. 配置终端点映射**
// 必须在中间件管道之后配置终端点
app.MapControllers(); // **9. 配置 Hangfire 的定时任务**
// 必须在应用完全构建并运行时添加定时任务
RecurringJob.AddOrUpdate<IHangfireJobs>("MyFirstJob", x => x.FirstJob(), "0 10 * * *"); app.Run();
#endregion

8.查看demo运行结果(每一秒执行一次的示例)

(十).NET6.0 搭建基于Quartz组件的定时调度任务的更多相关文章

  1. 十七、.net core(.NET 6)搭建基于Quartz组件的定时调度任务

     搭建基于Quartz组件的定时调度任务 先在package包项目下,添加Quartz定时器组件: 新建类库项目Wsk.Core.QuartzNet,并且引用包类库项目.然后新建一个中间调度类,叫Qu ...

  2. springmvc+quartz简单实现定时调度

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

  3. 基于Azkaban的任务定时调度实践

    本文由云+社区发表 作者:maxluo 一.Azkaban介绍 Azkaban是LinkedIn开源的任务调度框架,类似于JavaEE中的JBPM和Activiti工作流框架. Azkaban功能和特 ...

  4. 基于Quartz实现简单的定时发送邮件

    一.什么是Quartz Quartz 是一个轻量级任务调度框架,只需要做些简单的配置就可以使用:它可以支持持久化的任务存储,即使是任务中断或服务重启后,仍可以继续运行.Quartz既可以做为独立的应用 ...

  5. AI识万物:从0搭建和部署手语识别系统 ⛵

    作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 计算机视觉实战系列: https://www.showmeai.tech ...

  6. 定时调度系列之Quartz.Net详解

    一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提醒用户XXX "."每天的0点需要统计前一天的考勤记录"."每个月 ...

  7. 定时调度篇之Quartz.Net详解(被替换)

    一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提醒用户XXX "."每天的0点需要统计前一天的考勤记录"."每个月 ...

  8. 定时调度系列之Quartz.Net详解(转)

    出处:https://www.cnblogs.com/yaopengfei/p/9216229.html 一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提 ...

  9. 基于Quartz编写一个可复用的分布式调度任务管理WebUI组件

    前提 创业小团队,无论选择任何方案,都优先考虑节省成本.关于分布式定时调度框架,成熟的候选方案有XXL-JOB.Easy Scheduler.Light Task Scheduler和Elastic ...

  10. 从0到1搭建基于Kafka、Flume和Hive的海量数据分析系统(一)数据收集应用

    大数据时代,一大技术特征是对海量数据采集.存储和分析的多组件解决方案.而其中对来自于传感器.APP的SDK和各类互联网应用的原生日志数据的采集存储则是基本中的基本.本系列文章将从0到1,概述一下搭建基 ...

随机推荐

  1. 2024御网线上Pwn方向题解

    ASM Checksec检查保护 基本上保护都关闭了 64位ida逆向 程序只有一段,并且返回地址就是输入的数据,看起来就是srop了,找一下可以用的gadget 通过异或清空rax值,然后通过异或e ...

  2. Spark原理及关键技术点

    Spark Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎.Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop M ...

  3. 3.19 Linux命令的执行过程是怎样的?(新手必读)

    前面讲过,在 Linux 系统中"一切皆文件",Linux 命令也不例外.那么,当编辑完成 Linux 命令并回车后,系统底层到底发生了什么事情呢? 简单来说,Linux 命令的执 ...

  4. 3.4 Linux文件(目录)命名规则

    介绍完 Linux 系统中目录结构之后,读者一定想知道如何为文件或目录命名. 我们知道,在 Linux 系统中,一切都是文件,既然是文件,就必须要有文件名.同其他系统相比,Linux 操作系统对文件或 ...

  5. 血泪史: k8s Initial timeout of 40s passed.

    背景: k8s不管是 kubeadm init 和join都会报错 kubelet-start] Writing kubelet configuration to file "/var/li ...

  6. SQL排序分组

    --按某一字段分组取最大(小)值所在行的数据(2007-10-23于浙江杭州) /* 数据如下: name val memo a 2 a2(a的第二个值) a 1 a1--a的第一个值 a 3 a3: ...

  7. Solr Facet技术的应用与研究

      http://tech.meituan.com/solr-facet.html 问题背景 在 <搜索引擎关键字智能提示的一种实现> 一文中介绍过,美团的CRM系统负责管理销售人员的门店 ...

  8. Threejs的三维坐标系

    在三维空间中,所有的物体和相机都需要基于一个统一的坐标系来进行定位和操作.理解坐标系的基本概念,对于创建稳定.准确的三维效果至关重要. 基础 Three.js 采用的是右手坐标系,这意味着如果你将右手 ...

  9. Spring框架IoC核心详解

    介绍 IoC(Inversion of Control:控制反转) 是一种设计思想,而不是一个具体的技术实现.IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理,由S ...

  10. CVE-2023-3390 Linux 内核 UAF 漏洞分析与利用

    漏洞分析 漏洞成因是 nf_tables_newrule 在异常分支会释放 rule 和 rule 引用的匿名 set ,但是没有设置 set 的状态为 inactivate,导致批处理中后面的请求还 ...