namespace Admin.NET.Core.Service; /// /// 作业持久化(数据库) /// public class DbJobPersistence : IJobPersistence { private readonly IServiceProvider _serviceProvider; public DbJobPersistence(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } /// /// 作业调度器服务启动时 /// /// public IEnumerable Preload() { // 扫描所有实现IJob的作业任务 return App.EffectiveTypes.Where(t => t.IsJobType()) .Select(t => SchedulerBuilder.Create(JobBuilder.Create(t), t.ScanTriggers())); } /// /// 作业计划加载完成(通常用来同步存储介质(如数据库)数据到内存中) /// /// /// /// public SchedulerBuilder OnLoaded(string jobId, SchedulerBuilder builder) { using var serviceScope = _serviceProvider.CreateScope(); var rep = serviceScope.ServiceProvider.GetService>(); //if (builder.Behavior == PersistenceBehavior.Removed) //{ // rep.Delete(u => u.JobId == jobId); // return builder.Removed(); //} if (rep.IsAny(u => u.JobId == jobId)) { return builder.Updated(); } else { return builder.Appended(); } } /// /// 作业计划Scheduler的JobDetail变化时 /// /// public void OnChanged(PersistenceContext context) { using var serviceScope = _serviceProvider.CreateScope(); var db = serviceScope.ServiceProvider.GetService(); var sql = context.ConvertToSQL(db.EntityMaintenance.GetEntityInfo().DbTableName, NamingConventions.Pascal); db.Ado.ExecuteCommand(sql); } /// /// 作业计划Scheduler的触发器Trigger变化时 /// /// public void OnTriggerChanged(PersistenceTriggerContext context) { using var serviceScope = _serviceProvider.CreateScope(); var db = serviceScope.ServiceProvider.GetService(); var sql = context.ConvertToSQL(db.EntityMaintenance.GetEntityInfo().DbTableName, NamingConventions.Pascal); db.Ado.ExecuteCommand(sql); } }