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);
}
}