DbJobPersistence.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. /// 作业调度服务启动时
  14. /// </summary>
  15. /// <returns></returns>
  16. public IEnumerable<SchedulerBuilder> Preload()
  17. {
  18. // 扫描所有实现IJob的作业任务
  19. return App.EffectiveTypes.ScanToBuilders();
  20. }
  21. /// <summary>
  22. /// 作业计划初始化通知
  23. /// </summary>
  24. /// <param name="builder"></param>
  25. /// <returns></returns>
  26. public SchedulerBuilder OnLoading(SchedulerBuilder builder)
  27. {
  28. using var serviceScope = _serviceProvider.CreateScope();
  29. var rep = serviceScope.ServiceProvider.GetService<SqlSugarRepository<SysJobDetail>>();
  30. if (builder.Behavior == PersistenceBehavior.Removed)
  31. {
  32. rep.Delete(u => u.JobId == builder.GetJobBuilder().JobId);
  33. return builder.Removed();
  34. }
  35. if (rep.IsAny(u => u.JobId == builder.GetJobBuilder().JobId))
  36. {
  37. return builder.Updated();
  38. }
  39. else
  40. {
  41. return builder.Appended();
  42. }
  43. }
  44. /// <summary>
  45. /// 作业计划Scheduler的JobDetail变化时
  46. /// </summary>
  47. /// <param name="context"></param>
  48. public void OnChanged(PersistenceContext context)
  49. {
  50. using var serviceScope = _serviceProvider.CreateScope();
  51. var db = serviceScope.ServiceProvider.GetService<ISqlSugarClient>();
  52. var sql = context.ConvertToSQL(db.EntityMaintenance.GetEntityInfo<SysJobDetail>().DbTableName, NamingConventions.Pascal);
  53. db.Ado.ExecuteCommand(sql);
  54. }
  55. /// <summary>
  56. /// 作业计划Scheduler的触发器Trigger变化时
  57. /// </summary>
  58. /// <param name="context"></param>
  59. public void OnTriggerChanged(PersistenceTriggerContext context)
  60. {
  61. using var serviceScope = _serviceProvider.CreateScope();
  62. var db = serviceScope.ServiceProvider.GetService<ISqlSugarClient>();
  63. var sql = context.ConvertToSQL(db.EntityMaintenance.GetEntityInfo<SysJobTrigger>().DbTableName, NamingConventions.Pascal);
  64. db.Ado.ExecuteCommand(sql);
  65. }
  66. }