Quartz.NET 2.6 - 多个触发器相同 Class 库

Quartz.NET 2.6 - Multiple Triggers Same Class Library

我真的不知道这在 Quartz.net 中是否可行,但我正在开发一个 class 库以作为 crontrigger 在 quartz.net 中注册。这个 class 库有两个功能:

  1. 它将在名为 DBx 的 sql 服务器数据库中读取 table 如果 triggergroup 等于值 "internal"。这应该发生 每 1 分钟一次。

  2. 它将在名为 DBy 的 sql 服务器数据库中读取 table 如果 triggergroup 等于值 "external"。这应该发生 每周一至周五上午 8 点至下午 5 点。

我创建了 2 个作业(2 条记录出现在 jobs_detail table)和 2 个触发器(2 条记录分别出现在触发器和 cron_triggers table) schedules 并与相应的 triggergroup 关联但指向相同的 dll。

发生的事情是,当我启动调度程序时,即使它们具有不同的触发器名称和作业名称,"internal" 作业也会触发 "external" 作业,即使它不应该周一至周五晚上 8 点至下午 5 点之前被解雇。

有没有一种方法可以在不需要创建两个 classes 的情况下完成此操作,这两个 classes 基本上具有相同的代码,除了当他们要从存储库中读取时他们会选择一个DB 或另一个基于 "internal" 或 "external" 参数?

我通过创建一个新的 VS.NET 解决方案解决了这个问题,链接了其他项目并只实现了该解决方案的执行方法。编译创建了两个具有相同代码的不同 dll,现在我可以分别注册它们。

更新: 在分析了为什么有人反对这个解决方案之后,我进行了一项研究以更好地了解触发器和工作,最后我找到了我正在寻找的东西。最好、最优雅的答案是在触发器中使用 JobData,我需要决定是否要从 table A 或 B 中读取密钥。因此触发器的代码应如下所示:

ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                                            .WithIdentity(schedulerConfigurationEntity.TriggerName, schedulerConfigurationEntity.TriggerGroup)
                                                            .WithCronSchedule(schedulerConfigurationEntity.Schedule, x => x.WithMisfireHandlingInstructionFireAndProceed())
                                                            .ForJob(schedulerConfigurationEntity.JobName, schedulerConfigurationEntity.JobGroup)
                                                            .WithPriority(schedulerConfigurationEntity.Priority)
                                                            .UsingJobData("TriggerGroup", schedulerConfigurationEntity.TriggerGroup)
                                                            .Build();

为了获取参数,我执行了以下操作:

JobDataMap dataMap = context.Trigger.JobDataMap;
string triggerGroup = dataMap.GetString("TriggerGroup");

通过 triggerGroup,我可以在内部决定我应该从哪个 table 读取。显然,所有这些信息都在 Quartz 作业的作业定义中 table。现在有两个作业,使用相同的 class 库,定义了不同的触发器组值,并使用我可以从 Table A 或 B 动态读取的相同代码。