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