如何修改或关闭Hangfire默认15秒一次的数据库轮询间隔?
Hangfire 调整/关闭SQL Server存储默认轮询间隔方案
Hangfire默认15秒的数据库拉取行为由SQL Server存储的SchedulePollingInterval参数控制,该参数用于拉取待触发的定时任务,无法完全关闭,否则会导致定时任务无法正常触发,但你可以根据自身业务场景把间隔调得足够大,降低数据库访问频率。你当前的配置存在多处重复初始化存储的冗余问题,修改后的配置如下:
调整轮询间隔配置示例
你每日仅执行一次任务,可以把间隔调整为1小时甚至更长,只要小于任务执行周期即可,不会出现任务触发延迟:
services.AddHangfire(config => config.SetDataCompatibilityLevel(CompatibilityLevel.Version_170) .UseSimpleAssemblyNameTypeSerializer() .UseDefaultTypeSerializer() // 配置存储时传入参数修改轮询间隔 .UseSqlServerStorage(configuration.GetConnectionString("BackOffice"), new SqlServerStorageOptions { // 单位为TimeSpan,此处设置为1小时,可按需调整 SchedulePollingInterval = TimeSpan.FromHours(1) }) ); // 删除原重复的存储初始化逻辑 // var sqlStorage = new SqlServerStorage(configuration.GetConnectionString("BackOffice")); // JobStorage.Current = sqlStorage; // 无需重复传入存储,复用上方配置即可 services.AddHangfireServer(); // 删除重复的全局配置,AddHangfire中已完成配置 // GlobalConfiguration.Configuration.UseSqlServerStorage(configuration.GetConnectionString("BackOffice")); services.AddHttpClient();
注意事项
SchedulePollingInterval的取值必须小于你最小的任务执行间隔,比如你有每日执行的任务,间隔最大可设置为12小时,不会错过触发- 原配置重复初始化了3次SQL Server存储,精简后可避免配置冲突问题
- 该配置适配Hangfire 1.7及以上版本,无需额外添加其他依赖
内容的提问来源于stack exchange,提问作者saleh ibrahim
相关产品推荐
相关产品推荐

