Hangfire在特定时间每天重复工作

问题描述 投票:3回答:3

我想在每天早上9点运行篝火重复工作。这是我想做的 -

RecurringJob.AddOrUpdate(() => MyMethod(), "* 9 * * *");

我应该把这行代码放在哪里?

对不起,如果这是一个愚蠢的问题。

asp.net-mvc background-process hangfire recurring
3个回答
5
投票

假设您正在使用.Net Core,您可以在其中找到文件startup.cs。在那你可以找到一个Configure()方法。在方法内部,你可以在app.UseHangfireDashboard()app.UseHangfireServer()之后使用那条线,用于配置hangfire仪表板,这是可选的。不要忘记在ConfigureServices()方法中注册Hangfire Services,这可以在startup.cs本身找到。

您可以在Startup.cs中的ConfigureServices()中注册Hangfire Services

    public void ConfigureServices(IServiceCollection services)
    {    
    /*
    other services
    */

    services.AddHangfire(x => x.UseSqlServerStorage("YOUR_HangfireServerConnectionString"));

    /*
    services.AddMvc()
    */
    }

您可以在Startup.cs中的Configure()中设置Hangfire Cron

public void Configure(IApplicationBuilder app)
{
    app.UseHangfireDashboard();  
    app.UseHangfireServer();
    RecurringJob.AddOrUpdate(() => MyMethod(), "* 9 * * *");
}

更多参考link

UPDATE

cron表达式* 9 * * *表示作业将在9(24小时格式)之后每分钟触发一次 系统时间 UTC时间。

为了在每日上午9点创建一个定期工作,表达式应该是0 9 * * *在这里参考cron expressions


0
投票

我使用web api端点来创建作业。我总是给定期工作一个像guid那样的唯一标识符。这样,如果我需要编辑定期作业chron表达式,并可以通过我的web api端点更新它。

所以在网络api我有: -

[HttpPost]
[Microsoft.AspNetCore.Mvc.Route("daily")]
public IActionResult AddOrUpdateDailyReportJob([FromBody]JobOptions options)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    var result = _clientReportJobCreator.AddOrUpdateDailyClientReport(options.JobId, options.ChronExpression);

    return Ok(result);
}

这样的服务方法可以添加或更新现有的定期作业。

 public JobCreationResult AddOrUpdateDailyClientReport(string jobId, string chronExpression)
        {
            try
            {
                RecurringJob.AddOrUpdate(jobId, () => _clientDailyReportService.Run(), chronExpression);

                var result = new JobCreationResult
                {
                    JobId = jobId,
                    Success = true
                };

                return result;
            }
            catch (Exception ex)
            {
                var result = new JobCreationResult
                {
                    JobId = jobId,
                    Success = false,
                    Errors = new List<string>()
                    {
                        $"{ex.Message}"
                    }
                };

                return result;
            }
        }

0
投票

在asp.net中,您可以通过此nugetpackage将Microsoft.Owin Middleware和OwinStartup添加到您的项目中,然后使用startup.cs来设置hangfire。我们总是使用Startup.cs文件的Configuration方法来执行hangfire定期作业:

            public void Configuration(IAppBuilder app) 
            {
                app.UseHangfireDashboard();
                app.UseHangfireServer();
                RecurringJob.AddOrUpdate(19872.ToString(),() => MyMethod(), Cron.Daily(9, 0));
            }
© www.soinside.com 2019 - 2024. All rights reserved.