.net core 3.x 定時任務,用的sqlite數據庫,自己折騰了幾天,分享出來吧,自己下次用的時候找也方便。
1、依賴包:
- hangfire (1.7.7)
- hangfire.core(1.7.7)
- hangfire.Sqlite (1.4.2)
- Microsoft.EntityFrameworkCore.Sqlite(3.1.0)
2、Startup類配置
1、實現IDashboardAuthorizationFilter ,自己根據情況實現或百度
2、ConfigureServices(IServiceCollection services) 配置參考:
var sqliteOptions = new SQLiteStorageOptions();
SQLitePCL.Batteries.Init();
services.AddHangfire(configuration => configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer().UseRecommendedSerializerSettings()
.UseLogProvider(new ColouredConsoleLogProvider())
.UseSQLiteStorage("Data Source=./wg.db;", sqliteOptions)
);
在項目根目錄增加wg.db ,記得;號一定要寫
3、 Configure(IApplicationBuilder app, IWebHostEnvironment env) 配置參考:
var option = new BackgroundJobServerOptions { WorkerCount = 1 };
app.UseHangfireServer(option);
app.UseDeveloperExceptionPage();
app.UseHangfireDashboard(options: new DashboardOptions { Authorization = new[] { new ClipsAuthorizeFilter() } })
.UseCors(builder => builder.AllowAnyHeader());
GlobalJobFilters.Filters.Add(new AutomaticRetryAttribute { Attempts = 0 });
HangfireJobScheduler.ScheduleRecurringJobs();
4、HangfireJobScheduler類,定時規則代碼參考:
RecurringJob.RemoveIfExists(nameof(ClipsJob));
RecurringJob.AddOrUpdate<ClipsJob>(nameof(ClipsJob)
, job => job.Run(JobCancellationToken.Null),
Cron.MinuteInterval(1), TimeZoneInfo.Local);
5、定時任務程序類,參考:
public void Run(IJobCancellationToken token)
{
{
logger.LogWarning(" 開始採集信息");
logger.LogWarning("結束採集“);
}
}
收工!