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