😎调整定时任务持久化等相关代码

This commit is contained in:
zuohuaijun 2024-07-14 16:42:14 +08:00
parent 30a935e105
commit 31cc8fd274
3 changed files with 42 additions and 56 deletions

View File

@ -42,14 +42,14 @@ public class DbJobPersistence : IJobPersistence
var jobBuilder = schedulerBuilder.GetJobBuilder(); var jobBuilder = schedulerBuilder.GetJobBuilder();
// 加载数据库数据 // 加载数据库数据
var dbDetail = await db.Queryable<SysJobDetail>().FirstAsync(u => u.JobId == jobBuilder.JobId); var dbDetail = await db.Queryable<SysJobDetail>().FirstAsync(u => u.JobId == jobBuilder.JobId, stoppingToken);
if (dbDetail == null) continue; if (dbDetail == null) continue;
// 同步数据库数据 // 同步数据库数据
jobBuilder.LoadFrom(dbDetail); jobBuilder.LoadFrom(dbDetail);
// 获取作业的所有数据库的触发器 // 获取作业的所有数据库的触发器
var dbTriggers = await db.Queryable<SysJobTrigger>().Where(u => u.JobId == jobBuilder.JobId).ToListAsync(); var dbTriggers = await db.Queryable<SysJobTrigger>().Where(u => u.JobId == jobBuilder.JobId).ToListAsync(stoppingToken);
// 遍历所有作业触发器 // 遍历所有作业触发器
foreach (var (_, triggerBuilder) in schedulerBuilder.GetEnumerable()) foreach (var (_, triggerBuilder) in schedulerBuilder.GetEnumerable())
{ {
@ -73,24 +73,16 @@ public class DbJobPersistence : IJobPersistence
} }
// 获取数据库所有通过脚本创建的作业 // 获取数据库所有通过脚本创建的作业
var allDbScriptJobs = await db.Queryable<SysJobDetail>().Where(u => u.CreateType != JobCreateTypeEnum.BuiltIn).ToListAsync(); var allDbScriptJobs = await db.Queryable<SysJobDetail>().Where(u => u.CreateType != JobCreateTypeEnum.BuiltIn).ToListAsync(stoppingToken);
foreach (var dbDetail in allDbScriptJobs) foreach (var dbDetail in allDbScriptJobs)
{ {
// 动态创建作业 // 动态创建作业
Type jobType; Type jobType = dbDetail.CreateType switch
switch (dbDetail.CreateType)
{ {
case JobCreateTypeEnum.Script: JobCreateTypeEnum.Script => dynamicJobCompiler.BuildJob(dbDetail.ScriptCode),
jobType = dynamicJobCompiler.BuildJob(dbDetail.ScriptCode); JobCreateTypeEnum.Http => typeof(HttpJob),
break; _ => throw new NotSupportedException(),
};
case JobCreateTypeEnum.Http:
jobType = typeof(HttpJob);
break;
default:
throw new NotSupportedException();
}
// 动态构建的 jobType 的程序集名称为随机名称,需重新设置 // 动态构建的 jobType 的程序集名称为随机名称,需重新设置
dbDetail.AssemblyName = jobType.Assembly.FullName!.Split(',')[0]; dbDetail.AssemblyName = jobType.Assembly.FullName!.Split(',')[0];
@ -131,8 +123,7 @@ public class DbJobPersistence : IJobPersistence
/// <returns></returns> /// <returns></returns>
public async Task OnChangedAsync(PersistenceContext context) public async Task OnChangedAsync(PersistenceContext context)
{ {
using (var scope = _serviceScopeFactory.CreateScope()) using var scope = _serviceScopeFactory.CreateScope();
{
var db = scope.ServiceProvider.GetRequiredService<ISqlSugarClient>().CopyNew(); var db = scope.ServiceProvider.GetRequiredService<ISqlSugarClient>().CopyNew();
var jobDetail = context.JobDetail.Adapt<SysJobDetail>(); var jobDetail = context.JobDetail.Adapt<SysJobDetail>();
@ -151,7 +142,6 @@ public class DbJobPersistence : IJobPersistence
break; break;
} }
} }
}
/// <summary> /// <summary>
/// 作业计划Scheduler的触发器Trigger变化时 /// 作业计划Scheduler的触发器Trigger变化时
@ -160,8 +150,7 @@ public class DbJobPersistence : IJobPersistence
/// <returns></returns> /// <returns></returns>
public async Task OnTriggerChangedAsync(PersistenceTriggerContext context) public async Task OnTriggerChangedAsync(PersistenceTriggerContext context)
{ {
using (var scope = _serviceScopeFactory.CreateScope()) using var scope = _serviceScopeFactory.CreateScope();
{
var db = scope.ServiceProvider.GetRequiredService<ISqlSugarClient>().CopyNew(); var db = scope.ServiceProvider.GetRequiredService<ISqlSugarClient>().CopyNew();
var jobTrigger = context.Trigger.Adapt<SysJobTrigger>(); var jobTrigger = context.Trigger.Adapt<SysJobTrigger>();
@ -180,7 +169,6 @@ public class DbJobPersistence : IJobPersistence
break; break;
} }
} }
}
/// <summary> /// <summary>
/// 作业触发器运行记录 /// 作业触发器运行记录
@ -189,12 +177,10 @@ public class DbJobPersistence : IJobPersistence
/// <returns></returns> /// <returns></returns>
public async Task OnExecutionRecordAsync(PersistenceExecutionRecordContext context) public async Task OnExecutionRecordAsync(PersistenceExecutionRecordContext context)
{ {
using (var scope = _serviceScopeFactory.CreateScope()) using var scope = _serviceScopeFactory.CreateScope();
{
var db = scope.ServiceProvider.GetRequiredService<ISqlSugarClient>().CopyNew(); var db = scope.ServiceProvider.GetRequiredService<ISqlSugarClient>().CopyNew();
var jobTriggerRecord = context.Timeline.Adapt<SysJobTriggerRecord>(); var jobTriggerRecord = context.Timeline.Adapt<SysJobTriggerRecord>();
await db.Insertable(jobTriggerRecord).ExecuteCommandAsync(); await db.Insertable(jobTriggerRecord).ExecuteCommandAsync();
} }
} }
}

View File

@ -1,4 +1,4 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
// //
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
// //

View File

@ -59,7 +59,7 @@ public class SysMenuService : IDynamicApiController, ITransient
/// <summary> /// <summary>
/// 删除登录菜单树里面的按钮 /// 删除登录菜单树里面的按钮
/// </summary> /// </summary>
private void DeleteBtnFromMenuTree(List<SysMenu> menuList) private static void DeleteBtnFromMenuTree(List<SysMenu> menuList)
{ {
if (menuList == null) return; if (menuList == null) return;
for (var i = menuList.Count - 1; i >= 0; i--) for (var i = menuList.Count - 1; i >= 0; i--)