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

时间:2018-04-03 10:33:24

标签: asp.net-mvc background-process hangfire recurring

我正在尝试每天早上9点运行篝火重复工作。这就是我想要做的事情 -

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

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

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

3 个答案:

答案 0 :(得分:4)

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

您可以在 Startup.cs

中的ConfigureServices()注册Hangfire服务
    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

<强>更新

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

要在每日上午9点创建定期作业,表达式应为0 9 * * *,请参阅此处cron expressions

答案 1 :(得分:0)

我使用web api端点创建作业。我总是给定期工作一个像guid那样的唯一标识符。这样,如果我需要编辑定期作业chron表达式,并可以通过我的web 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;
            }
        }

答案 2 :(得分:0)

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

            public void Configuration(IAppBuilder app) 
            {
                app.UseHangfireDashboard();
                app.UseHangfireServer();
                RecurringJob.AddOrUpdate(19872.ToString(),() => MyMethod(), Cron.Daily(9, 0));
            }