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

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();
}

posted @   過朢  阅读(61)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示