CRON - verisoftCZ/verisoft-framework GitHub Wiki

Pro CRON joby používáme Hangfire.

Jak si zaregistrovat hangfire:

private static void RegisterHangfire(IServiceCollection serviceCollection, IConfiguration configuration)
{
    serviceCollection.AddHangfire(options =>
    {
        options.HangfireSchemaName = "Hangfire";
        options.ConnectionString = configuration["Database:ConnectionString"];
    });
    HangfireJobsConfig hangfireJobsConfig = new HangfireJobsConfig(configuration);
    serviceCollection.AddSingleton(hangfireJobsConfig);
}

///Je možné přenastavit všechny tyto hodnoty:

public class HangfireConfig
{
    public string HangfireSchemaName { get; set; } = null;

    public string[] CustomProcessingQueues { get; set; } = [];

    public string ConnectionString { get; set; } = string.Empty;

    public int NumberOfAutomaticRetries { get; set; } = 0;
}

a v Program.cs

app.UseHangfire();
app.RegisterCronJobs();

Pro zaregistrování jobu:

public static class CronRegistrator
{
    public static void RegisterCronJobs(this IApplicationBuilder app)
    {
        var hangfireJobsConfig = app.ApplicationServices.GetService<HangfireJobsConfig>();

        CronJobSetup.AddCronJob<DemoCronJob>(
            (x) => x.MakeSomeCronJob(),
            options =>
            {
                options.CronEnabled = false;
                options.CronSettings = hangfireJobsConfig.JobOneSettings;
            });

        CronJobSetup.AddCronJob<DemoCronJob>(
           (x) => x.MakeSomeCronJobTwo(),
           options =>
           {
               options.CronEnabled = true;
               options.CronSettings = hangfireJobsConfig.JobOneSettings;
           });
    }
}

HangfireJobsConfig

public class HangfireJobsConfig
{
    public HangfireJobsConfig(IConfiguration configuration)
    {
        if (configuration is null)
        {
            throw new ArgumentNullException(nameof(configuration));
        }

        configuration.GetSection("HangfireJobs").Bind(this);
    }

    public string JobOneSettings { get; set; }

    public string JobTwoSettings { get; set; }
}

v appsettings:

"HangfireJobs": {
    "JobOneSettings": "0 0 * * *",
    "JobTwoSettings": "0 1 * * *"
  },
⚠️ **GitHub.com Fallback** ⚠️