本文是在Hangfire基础配置已经完成且能够成功运行的情况下进行配置的。
框架:ABP
语言:C#
我的Hangfire是在ABP框架的startup文件中配置的。新建类的位置不固定,但最后配置过期时间的代码应当放在你配置Hangfire基础参数的部分。
1.定义一个继承自IstateHandler的类,可以在任意位置新建一个文件来定义。声明StateName属性并赋值为成功状态,用于筛选执行成功的任务;实现构造函数传参,可自由定义过期时间;实现Apply方法,将过期时间更改为自定义时间。
public class SucceededJobExpireHandler : IStateHandler
{
public TimeSpan JobExpirationTimeout;
public SucceededJobExpireHandler(TimeSpan jobExpirationTimeout)
{
JobExpirationTimeout = jobExpirationTimeout;
}
public string StateName => SucceededState.StateName;
public void Apply(ApplyStateContext context, IWriteOnlyTransaction transaction)
{
context.JobExpirationTimeout = JobExpirationTimeout;
}
public void Unapply(ApplyStateContext context, IWriteOnlyTransaction transaction)
{
}
}
2.然后在startup.cs的Configure方法中添加过期时间的配置即可,此处设置过期时间为30分钟。此后新建任务成功运行后都只能在数据库保存30分钟。
GlobalStateHandlers.Handlers.Add(new SucceededJobExpireHandler(new TimeSpan(0, 30, 0)));