[筆記]Dotnet Core 使用Coravel建立排程

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

可依照需求選用適合的方式