前言:
什么是定时任务?顾名思义就是在固定一段时间,执行固定一段任务。如同闹钟每天定时叫你起床。
我们可以利用定时任务,让系统在固定时间执行一个方法。
那么我们在ABP框架怎么配置定时任务呢?
第一步:部署
我们需要安装三个包:
Hangfire.Core
Hangfire.SqlServer或(MySQL数据库,Hangfire.MySQL.Core)对应自己的数据库,但SQL会比较稳定
Hangfire.MemoryStorage.Core
然后在控制台运行:Install-Package Hangfire
然后其他用到定时服务的层安装:Hangfire.Core一个就可以了
配置
然后打开Host层(展示层)的Startup.cs类
在ConfigureServices 方法中注册服务
这里是配置数据库,数据库需要确保存在,这里配置的是SQL Server数据库:
public void ConfigureServices(IServiceCollection services)
{
services.AddHangfire(r => r.UseSqlServerStorage("Data Source=***;Initial Catalog=表名;User ID=sa;Password=密码"));
}
然后在Configure 方法中加入HangfireServer及HangfireDashboard:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseHangfireServer();
app.UseHangfireDashboard(); //打开仪表盘
......略
}
上面2步,我们就打开了我们的定时任务服务,和打开了仪表盘,如果不行使用仪表盘业务可以不添加。
看看仪表盘效果吧:在网址后面输入/hangfire就可以打开我们的仪表盘了。可以操作我们的定时任务
第二步:使用
一:每次程序运行的时候执行:
BackgroundJob.Enqueue(() => Console.WriteLine("我只执行一次!!!!"));
二:延迟任务执行
例如,在注册后的一天向新注册的用户发送电子邮件。
BackgroundJob.Schedule(() => Console.WriteLine($"我是1分钟后执行一次"), TimeSpan.FromMinutes(1));
好呀很多延迟,一个小时的,延迟一天的等等。。。。很多
三.定时执行
RecurringJob.AddOrUpdate("2", () => Console.Write("我每隔2分钟执行一次"), Cron Cron.MinuteInterval(2));
当然还有按年的,按月..很多,具体看看Cron这个类就知道了
四. 延续性任务
延续性任务类似于.NET中的Task
,可以在第一个任务执行完之后紧接着再次执行另外的任务:
如,我等待,名为“2”的定时任务完成在执行
BackgroundJob.ContinueWith("2", () => Console.Write("我是延续性任务"));
测试看看效果:
我们把,这些任务写进Test接口中,我一旦调用Test接口这些任务就会创建。
不用担心重复创建的问题因为他们同名的任务只会创建一次
public string Test()
{
BackgroundJob.Enqueue(() => Console.WriteLine("我只执行一次!!!!"));
BackgroundJob.Schedule(() => Console.WriteLine($"我是1分钟后执行一次"), TimeSpan.FromMinutes(1));
RecurringJob.AddOrUpdate("2", () => Console.Write("我每隔2分钟执行一次"), Cron.MinuteInterval(2));
BackgroundJob.ContinueWith("2", () => Console.Write("我是延续性任务"));
return "Heelo World";
}
调用Test接口测试一下