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. 使用 FastGPT 工作流搭建 GitHub Issues 自动总结机器人

    如今任何项目开发节奏都很快,及时掌握项目动态是很重要滴,GitHub Issues 一般都是开发者和用户反馈问题的主要渠道. 然而,随着 Issue 数量的增加,及时跟进每一个问题会变得越来越困难. ...

  2. quartz集群增强版🎉

    quartz集群增强版 转载请著名出处https://www.cnblogs.com/funnyzpc/p/18534034 这是除了mee_admin之外,投入时间精力最多的一次开源了,quartz ...

  3. 100 款支持 .NET 多版本的强大 WPF 控件库

    前言 推荐一款集成了超过100款控件的流行 XAML 控件库,同时提供了一系列常用的 .NET 帮助类-CookPopularUI.它可以简化开发流程,让我们能够更加专注于核心业务逻辑的实现. 让我们 ...

  4. YIi2 Object 报错问题

    yii2的老版本会有在PHP7运行的错误提示 Cannot use yii\base\Object as Object because 'Object' is a special class name ...

  5. 在运行期通过反射了解JVM内部机制

    本文由 ImportNew - 黄飞飞 翻译自 takipioncode.欢迎加入Java小组.转载请参见文章末尾的要求. 在日常工作中,我们都习惯直接使用或者通过框架使用反射.在没有反射相关硬编码知 ...

  6. Maven多模块项目 eclipse热部署 Maven项目实现 tomcat热部署

    Maven 多模块项目在eclipse下面热部署,即你可以体验下无论你修改整个项目里面的任何模块的代码,都不需要用maven打包就可以看到效果, 1.首先准备好创建一个maven多项目的代码,准备好一 ...

  7. 九、FreeRTOS学习笔记-列表和列表项

    列表和列表项的简介 列表是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列表被用来跟踪 FreeRTOS中的任务. 列表项就是存放在列表中的项目 列表相当于链表,列表项相当于节点,Fre ...

  8. vue在组件中实现双向绑定

    父组件中的一个变量和子组件的input框实现双向绑定,就要用到下面的方法: 父组件: <script> import CustomInput from './CustomInput.vue ...

  9. Tornado框架之模板(三)

    知识点 静态文件配置 static_path StaticFileHandler 模板使用 变量与表达式 控制语句 函数 块 目录: 静态文件 static_path 对于静态文件目录的命名,为了便于 ...

  10. uniapp 画布

    1.前言 uniapp中的canvas与HTML中的canvas用法并不同,他的使用文档请参考微信小程序画布 2.基本使用 1.准备canvas容器,并为其设置canvas-id和宽高(为了兼容H5, ...