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.ScanToBuilders(); } /// /// 作业计划初始化通知 /// /// /// public SchedulerBuilder OnLoading(SchedulerBuilder builder) { using var serviceScope = _serviceProvider.CreateScope(); var rep = serviceScope.ServiceProvider.GetService>(); if (builder.Behavior == PersistenceBehavior.Removed) { rep.Delete(u => u.JobId == builder.GetJobBuilder().JobId); return builder.Removed(); } if (rep.IsAny(u => u.JobId == builder.GetJobBuilder().JobId)) { return builder.Updated(); } 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); } }