abpvnext中使用后台工作者BackgroundWorker创建定时任务,实现定时从更新需要缓存的数据到redis
一、创建后台工作者
1、创建后台工作者
在application层 创建后台工作者类,内容如下 ,其中TAHM为我的自定义前缀名。 这个类的DoWorkAsync方法就是后台工作者默认定时执行的方法,重写这个方法可以填充自己的业务。
注意:为什么我在这个类里加了这么多service注入,那是因为我在第二步创建加载缓存的业务LoadEquipInfoService时,需要这些service,但是我在那边又没法初始化,只能在这个类里初始化,并借助doworkasync方法中的参数
workerContext.ServiceProvider.GetRequiredService<ILoadEquipInfoService>(); 来获取我的缓存业务接口对象,然后他需要的service初始化值就传递过去。
其实简单点理解,就是这个后台工作者类相当于一个控制器,DoWorkAsync相当于一个控制器暴露接口,后台工作者使用的service中需要注入和初始化的对象都要从这里通过workerContext来实现。
using JQ.TAHM.Application.Contracts;
using JQ.TAHM.Domain.Shared;
using JQ.TAHM.Domain;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.BackgroundWorkers;
using Volo.Abp.Caching;
using Volo.Abp.TenantManagement;
using Volo.Abp.Threading;
namespace JQ.TAHM.Application;
public class TAHMBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
{
private readonly IDistributedCache<List<PageTahmCJ_descOutput>, string> _cj_descCache;
private readonly IDistributedCache<List<TahmCJ_wd_tmpDto>, string> _cj_wd_tmpCache;
private readonly ITenantRepository _tenantrepository;
private readonly ITahmCJ_descAppService _cj_descappService;
private readonly ITahmCJ_wd_tmpAppService _cj_wd_tmpappService;
public TAHMBackgroundWorker(
AbpAsyncTimer timer,
IServiceScopeFactory serviceScopeFactory, IDistributedCache<List<PageTahmCJ_descOutput>, string> cj_de