在AbpVnext中简单使用原生的Quartz.net
1:一个静态帮助类
using Quartz; using Quartz.Impl; using Quartz.Core; using System; using System.Threading.Tasks; namespace GDBS.LogService.HttpApi.Hosting { public class QuartzHelper { public static async Task DoWork<T>(int Seconds = 10, int RepeatCount = int.MaxValue, string cronExpressionStr = null) where T : IJob, new() { ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); IScheduler scheduler = schedulerFactory.GetScheduler().Result; IJobDetail jobDetail = JobBuilder.Create<T>().Build(); TriggerBuilder trigger = TriggerBuilder.Create(); if (cronExpressionStr == null) { trigger.WithSimpleSchedule(c => c.WithIntervalInSeconds(Seconds).WithMisfireHandlingInstructionNextWithRemainingCount().WithRepeatCount(RepeatCount)); } else { trigger.WithCronSchedule(cronExpressionStr); } var builderTrigger = trigger.Build(); await scheduler.ScheduleJob(jobDetail, builderTrigger); await scheduler.Start(); } } }
2:在AbpVnext中使用,实现接口,继承IJob
/// <summary> /// ******************** /// </summary> [DisallowConcurrentExecution] public class QQ爱Quartz03Services : IQQ爱Quartz03Services, ITransientDependency, IJob { public async Task Execute(IJobExecutionContext context) { try { await GetProvinQQ爱TypeInfoEveryCity(); await QQ爱RedisHelper.GetRedisDB(5).ListRightPushAsync(LogServiceQuartzConsts.Log_quartzCountInfo, JsonConvert.SerializeObject(new QuartzLogInfoDto { addtime = DateTime.Now, quartz_type = 3, quartz_name = "测试Quartz03Services abc" })); } catch (Exception) { } } }
3:加入进来
public override void OnApplicationInitialization(ApplicationInitializationContext context) { var app = context.GetApplicationBuilder(); app.UseStaticFiles(); app.UseRouting(); app.UseCors(); app.UseSwagger(); app.UseSwaggerUI(options => { options.SwaggerEndpoint("v1/swagger.json", "MainteReinfor Api"); options.DocumentTitle = "***相关服务Swagger LMZ"; }); app.UseAuthentication(); app.UseMiddleware<CurrentSysAuthenticationMiddleware>(); app.UseAuthorization(); app.UseMiddleware<CustomUserClaimMiddleware>(); app.UseConfiguredEndpoints(); //==========在abp尾部新增如下code即可 Task.Factory.StartNew(() => { var lodata = LmzQuartzHelper.DoWork<AbcService>(CronString: "0 15 3,12 * * ? *").Id; var aa = LmzQuartzHelper.DoWork<LogRedisQuartzService>(Seconds: 10).Id; var disdata = LmzQuartzHelper.DoWork<QuartzLogsCheckDisDataService>(CronString: "0 0 1/1 * * ? *").Id; }); }
4:个人建议项目发布在Linux Docker环境中来使用,IIS存在定时回收的机制,
生产环境中妥妥的运行中,下面为简单的测试消费记录日志
如有疑问或者错误的地方,请跟帖,本人会第一时间答复以及相互学习,谢谢!个人会不断的上传自己的学习心得!
好了今天就先到这里,下次有时间再更新,如果存在不合理的地方,欢迎大家多多指教留言!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具