namespace Admin.NET.Core.Service; /// /// 作业持久化(数据库) /// public class DbJobPersistence : IJobPersistence { private readonly IServiceProvider _serviceProvider; public DbJobPersistence(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } /// /// 作业调度服务启动时 /// /// public IEnumerable Preload() { return App.EffectiveTypes.ScanToBuilders(); } /// /// 作业计划初始化通知 /// /// /// public SchedulerBuilder OnLoading(SchedulerBuilder builder) { return builder; } /// /// 作业计划Scheduler的JobDetail变化时 /// /// public void OnChanged(PersistenceContext context) { using var serviceScope = _serviceProvider.CreateScope(); var db = serviceScope.ServiceProvider.GetService(); var jobDetail = context.JobDetail.Adapt(); if (context.Behavior == PersistenceBehavior.Appended) { db.Insertable(jobDetail).ExecuteCommand(); } else if (context.Behavior == PersistenceBehavior.Updated) { db.Updateable(jobDetail).WhereColumns(u => new { u.JobId }).IgnoreColumns(u => new { u.Id }).ExecuteCommand(); } else if (context.Behavior == PersistenceBehavior.Removed) { db.Deleteable().Where(u => u.JobId == jobDetail.JobId).ExecuteCommand(); } } /// /// 作业计划Scheduler的触发器Trigger变化时 /// /// public void OnTriggerChanged(PersistenceTriggerContext context) { using var serviceScope = _serviceProvider.CreateScope(); var db = serviceScope.ServiceProvider.GetService(); var jobTrigger = context.Trigger.Adapt(); if (context.Behavior == PersistenceBehavior.Appended) { db.Insertable(jobTrigger).ExecuteCommand(); } else if (context.Behavior == PersistenceBehavior.Updated) { db.Updateable(jobTrigger).WhereColumns(u => new { u.TriggerId, u.JobId }).IgnoreColumns(u => new { u.Id }).ExecuteCommand(); } else if (context.Behavior == PersistenceBehavior.Removed) { db.Deleteable().Where(u => u.TriggerId == jobTrigger.TriggerId && u.JobId == jobTrigger.JobId).ExecuteCommand(); } } }