DbJobPersistence.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. return builder.Appended();
  40. }
  41. /// <summary>
  42. /// 作业计划Scheduler的JobDetail变化时
  43. /// </summary>
  44. /// <param name="context"></param>
  45. public void OnChanged(PersistenceContext context)
  46. {
  47. using var serviceScope = _serviceProvider.CreateScope();
  48. var db = serviceScope.ServiceProvider.GetService<ISqlSugarClient>();
  49. var sql = context.ConvertToSQL(db.EntityMaintenance.GetEntityInfo<SysJobDetail>().DbTableName, NamingConventions.Pascal);
  50. db.Ado.ExecuteCommand(sql);
  51. }
  52. /// <summary>
  53. /// 作业计划Scheduler的触发器Trigger变化时
  54. /// </summary>
  55. /// <param name="context"></param>
  56. public void OnTriggerChanged(PersistenceTriggerContext context)
  57. {
  58. using var serviceScope = _serviceProvider.CreateScope();
  59. var db = serviceScope.ServiceProvider.GetService<ISqlSugarClient>();
  60. var sql = context.ConvertToSQL(db.EntityMaintenance.GetEntityInfo<SysJobTrigger>().DbTableName, NamingConventions.Pascal);
  61. db.Ado.ExecuteCommand(sql);
  62. }
  63. }