😎调整定时任务持久化等相关代码
This commit is contained in:
parent
30a935e105
commit
31cc8fd274
@ -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();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
|
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
|
||||||
//
|
//
|
||||||
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
||||||
//
|
//
|
||||||
|
|||||||
@ -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--)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user