首页 > 其他分享 >在.NET MVC 中使用 Quartz.NET 创建可以修改时间的定时任务,并结合 Autofac 进行依赖注入的步骤

在.NET MVC 中使用 Quartz.NET 创建可以修改时间的定时任务,并结合 Autofac 进行依赖注入的步骤

时间:2024-07-24 14:09:47浏览次数:10  
标签:Autofac Quartz 创建 scheduler var NET public

net 4.6.1  

nuget包

Quartz    3.0

Autofac   5.0

Autofac.Mvc5  5.0

 

 

步骤 1: 创建 Quartz 任务

首先,创建一个实现 IJob 接口的任务类。这个类将定义你希望定时执行的操作。

public class MyJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
// 这里是你的定时任务逻辑
Debug.WriteLine($"Job executed at: {DateTime.Now}");
return Task.CompletedTask;
}
}

 

步骤 2: 配置 Quartz

创建一个 Quartz 配置类,用于设置调度器和作业。

public class QuartzConfig
{
public static IScheduler InitializeScheduler()
{
// 创建调度器工厂
var schedulerFactory = new StdSchedulerFactory();
var scheduler = schedulerFactory.GetScheduler().Result;

// 启动调度器
scheduler.Start().Wait();
return scheduler;
}
}

 

步骤 3: 使用 Autofac 进行依赖注入

在项目中配置 Autofac,以便将 IScheduler 和你的作业类注册到容器中。

public class AutofacConfig
{
public static void Register()
{
var builder = new ContainerBuilder();

// 注册 Quartz IScheduler
builder.Register(c => QuartzConfig.InitializeScheduler()).As<IScheduler>().SingleInstance();

// 注册作业
builder.RegisterType<MyJob>().AsSelf();

// 注册控制器
builder.RegisterControllers(typeof(MvcApplication).Assembly);

var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}

 

步骤 4: 创建控制器

创建一个控制器,用于调度作业和修改作业的时间。

public class JobController : Controller
{
private readonly IScheduler _scheduler;

public JobController(IScheduler scheduler)
{
_scheduler = scheduler;
}

// 方法用于创建和调度作业
public async Task<ActionResult> ScheduleJob(int Sec)
{
var job = JobBuilder.Create<MyJob>()
.WithIdentity("myJob", "group1")
.Build();

var trigger = TriggerBuilder.Create()
.WithIdentity("myTrigger", "group1")
.StartNow() // 立即开始
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(Sec) // 设置以秒为单位的时间间隔
.RepeatForever()) // 永久重复
.Build();

await _scheduler.ScheduleJob(job, trigger);
return Content($"Job scheduled to run every {Sec} seconds!");
}

// 方法用于修改作业的时间
public async Task<ActionResult> RescheduleJob(int newSec)
{
var triggerKey = new TriggerKey("myTrigger", "group1");
var trigger = await _scheduler.GetTrigger(triggerKey) as ITrigger;

if (trigger != null)
{
var newTrigger = trigger.GetTriggerBuilder()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(newSec) // 修改间隔
.RepeatForever())
.Build();

await _scheduler.RescheduleJob(triggerKey, newTrigger);
return Content($"Job rescheduled to run every {newSec} seconds!");
}

return Content("Job not found!");
}
}

步骤 5: 在 Global.asax 中注册 Autofac

在 Global.asax 中调用 AutofacConfig.Register() 方法,以确保在应用程序启动时注册依赖项。

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);

AutofacConfig.Register();
}

标签:Autofac,Quartz,创建,scheduler,var,NET,public
From: https://www.cnblogs.com/jigeqiu/p/18320774

相关文章

  • Vue与ASP.NET Core Web Api设置localhost与本地ip地址皆可访问
    Vue的设置我们创建并启动一个Vue项目,如下所示:打开cmd,输入ipconfig查询本地ip地址:想通过本地ip地址访问,把localhost改成本地ip地址,发现打不开:这是因为Vue项目默认只有localhost,查看启动终端:这时候就需要进行配置,打开package.json,在scripts下的dev中加上--host0.0.0.0:再......
  • .NET8的AOT技术
    AOT技术的好处:提升启动速度;降低发布包的大小;内存占用小;编译为字节码反编译难度加大;  项目配置<PropertyGroup><RuntimeIdentifier>win-x86;win-x64;osx-x64;linux-x64</RuntimeIdentifier><!--根据需要设置--><PublishSingleFile>true</PublishSingleFile><P......
  • 关于学习.NET的历程回顾与今后的探索实践方向
    关于学习.NET的历程回顾自从2023年9月11日注册公众号以来,这次还是第一次介绍自己。我今年24岁,双非本,211硕,非计算机相关专业。大学期间接触过计算机相关的课程可能就《大学生计算机基础》、《C语言程序设计》,并且也没掌握多好。22年4月研究生复试结束,联系好导师后,由于导师研究方......
  • 在 Kubernetes 中设置 Pod 优先级及其调度策略详解
    个人名片......
  • Kubernetes Secret 详解
    KubernetesSecret是一种用于存储和管理敏感信息的对象,如密码、OAuth令牌和SSH密钥等。使用Secret可以避免将机密数据直接放在Pod规约或容器镜像中,从而增加了应用程序的安全性。Secret的类型Kubernetes支持多种类型的Secret,包括:​​Opaque​​:默认的Secret类......
  • ASTGNN(Localised Adaptive Spatial-Temporal Graph Neural Network)
    引言        本文主要探讨的问题是:能否以及在多大程度上对时空图模型进行局部化。并且将研究领域集中到ASTGNN上。ASTGNNs通常使用自适应图卷积层对空间依赖性进行建模。通过学习图邻接矩阵来捕获空间依赖性。因此,ASTGNN的局部化是通过邻接矩阵(仅捕获空间依赖性)的稀疏......
  • .NET 中高效 Excel 解决方案 MiniExcel
    前言MiniExcel是一个用于.NET平台的轻量级、高性能的库,专注于提供简单易用的API来处理Excel文件。以下是MiniExcel的特点总结:轻量级与高效:MiniExcel设计为占用较少的系统资源,尤其在内存使用上表现优秀,适合处理大数据集而不会导致内存溢出。简单易用:API设计直观,......
  • 0207-pnet 模拟链路层数据
    环境Time2022-11-20WSL-Ubuntu22.04Rust1.65.0pnet0.31.0前言说明参考:https://docs.rs/pnet_datalink/0.31.0/pnet_datalink/dummy目标使用pnet_datalink包中的dummy模拟数据链路层的数据交换。Cargo.toml[package]edition="2021"name="network"versi......
  • K8s - 利用Kubeasz工具快速部署Kubernetes
    Kubeaszhttps://github.com/easzlab/kubeasz/https://github.com/easzlab/kubeasz/releasesKubeasz是一个基于ansible-playbook的Kubernetes二进制方式自动化部署项目,避免纯手工部署kubernetes过程中繁琐易错的步骤。考虑到了国内的网络环境,能够快速地完成Kubernetes......
  • 【云原生】Kubernetes 中的 PV 和 PVC 介绍、原理、用法及实战案例分析
    ✨✨欢迎大家来到景天科技苑✨✨......