Dotnet Core 專案建立Scheduler Job
希望直接跟網頁專案綁再一起不用另外分開
可以使用Coravel
安裝Coravel
建立要執行的行為
為了方便本次測試排程是否正常運作我實作了一段程式
每次這段程式被執行就會產生一個檔案到我指定的位置並且記錄下時間
要使用Coravel的 class 需要繼承 IInvocable
using Coravel.Invocable;
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
namespace TryCoravelJob
{
public class JobTest : IInvocable
{
public Task Invoke()
{
string outoutFilePath = $"D:\\home\\JobTest\\{DateTime.Now:yyyyMMdd_HHmmss}.txt";
string headerRow = $"Time: {DateTime.Now:yyyyMMdd_HHmmss}";
File.WriteAllText(outoutFilePath, headerRow, Encoding.UTF8);
return Task.CompletedTask;
}
}
}
Startup.cs內的配置
在ConfigureServices
內加入 services.AddTransient<JobTest>();
及services.AddTransient<JobTest>();
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
//略過其他Service
services.AddScheduler();
services.AddTransient<JobTest>();
}
在Configure
內加入app.ApplicationServices.UseScheduler
並設定排程規則
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.ApplicationServices.UseScheduler(scheduler => {
scheduler.Schedule<JobTest>().Cron("0 * * * *");
});
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
Cron的參數設定規則可以使用 https://crontab.guru/ 線上工具測試並預覽結果
此外還有提供更多Schedule方法
Daily
DailyAt
DailyAtHour
EveryFifteenMinutes
EveryFifteenSeconds
EveryFiveMinutes
EveryFiveSeconds
EveryMinute
EverySecond
EverySeconds
EveryTenMinutes
EveryTenSeconds
EveryThirtyMinutes
EveryThirtySeconds
Hourly
HourlyAt
Weekly
可依照需求選用適合的方式