我想在每天早上9点运行篝火重复工作。这是我想做的 -
RecurringJob.AddOrUpdate(() => MyMethod(), "* 9 * * *");
我应该把这行代码放在哪里?
对不起,如果这是一个愚蠢的问题。
假设您正在使用.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
我使用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;
}
}
在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));
}