DbJobPersistence.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. namespace Admin.NET.Core.Service;
  2. /// <summary>
  3. /// 作业持久化(数据库)
  4. /// </summary>
  5. public class DbJobPersistence : IJobPersistence
  6. {
  7. private readonly IServiceProvider _serviceProvider;
  8. public DbJobPersistence(IServiceProvider serviceProvider)
  9. {
  10. _serviceProvider = serviceProvider;
  11. }
  12. /// <summary>
  13. /// 作业计划Scheduler的JobDetail变化时
  14. /// </summary>
  15. /// <param name="context"></param>
  16. public void OnChanged(PersistenceContext context)
  17. {
  18. using var serviceScope = _serviceProvider.CreateScope();
  19. var db = serviceScope.ServiceProvider.GetService<ISqlSugarClient>();
  20. var sql = context.ConvertToSQL(db.EntityMaintenance.GetEntityInfo<SysJobDetail>().DbTableName, NamingConventions.Pascal);
  21. db.Ado.ExecuteCommand(sql);
  22. }
  23. /// <summary>
  24. /// 作业计划Scheduler的触发器Trigger变化时
  25. /// </summary>
  26. /// <param name="context"></param>
  27. public void OnTriggerChanged(PersistenceTriggerContext context)
  28. {
  29. using var serviceScope = _serviceProvider.CreateScope();
  30. var db = serviceScope.ServiceProvider.GetService<ISqlSugarClient>();
  31. var sql = context.ConvertToSQL(db.EntityMaintenance.GetEntityInfo<SysJobTrigger>().DbTableName, NamingConventions.Pascal);
  32. db.Ado.ExecuteCommand(sql);
  33. }
  34. /// <summary>
  35. /// 作业调度器服务启动时(通常用来同步持久化数据到内存中)
  36. /// </summary>
  37. /// <param name="jobId"></param>
  38. /// <param name="builder"></param>
  39. /// <returns></returns>
  40. public SchedulerBuilder Preload(string jobId, SchedulerBuilder builder)
  41. {
  42. // 如果是更新操作,则 return builder.Updated();
  43. // 如果是新增操作,则 return builder.Appended();
  44. // 如果是删除操作,则 return builder.Removed();
  45. return builder.Updated();
  46. }
  47. }