quartz.dll 中是否必须包含自定义触发器持久性委托?
Do custom trigger persistence delegates have to be included in quartz.dll?
特殊要求促使我在 quartz.net 中实现自定义触发器。 (版本 2.3.0)
我遇到的问题是注册适当的持久性委托。
有
- 主项目,引用所需的 Quartz.dll 并启动调度程序实例
- 核心项目被 "Main project" 引用并扩展了该项目的功能,其他项目也可以访问该项目
现在 "Core project" 是我声明自定义触发器实现和所属的自定义持久性委托的地方。
在"Main project"中,调度程序实例的配置数据是通过配置文件提供的,我在这里添加:
<add key="quartz.jobStore.driverDelegateInitString" value="triggerPersistenceDelegateClasses=SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate, SolutionName.QuartzService.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
(之前我也试过SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate
)
当我启动调度程序时,我发现尝试注册持久性委托失败:
Unhandled Exception: Quartz.SchedulerConfigException: Failure occured during job recovery. ---> Quartz.Impl.AdoJobStore.NoSuchDelegateException: Couldn't instantiate delegate: Error instantiating TriggerPersistenceDelegate of type: SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate ---> Quartz.Impl.AdoJobStore.NoSuchDelegateException: Error instantiating TriggerPersistenceDelegate of type: SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate ---> System.TypeLoadException: Could not load type 'SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate' from assembly 'Quartz, Version=2.3.0.0, Culture=neutral, PublicKeyToken=null'.
Quartz
-assembly 被明确提及让我感到困惑。我是否必须编译 Quartz 源代码,包括我的自定义持久性委托以便找到它?还是我漏掉了什么?
答案显然是:没有。
就我而言,我似乎只是使用了错误的设置名称。
我换了
<add key="quartz.jobStore.driverDelegateInitString" value="triggerPersistenceDelegateClasses=SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate, SolutionName.QuartzService.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
与
<add key="quartz.jobStore.driverDelegateInitString" value="triggerPersistenceDelegateTypes=SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate, SolutionName.QuartzService.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
现在调度程序启动时不再有任何抱怨。
特殊要求促使我在 quartz.net 中实现自定义触发器。 (版本 2.3.0)
我遇到的问题是注册适当的持久性委托。
有
- 主项目,引用所需的 Quartz.dll 并启动调度程序实例
- 核心项目被 "Main project" 引用并扩展了该项目的功能,其他项目也可以访问该项目
现在 "Core project" 是我声明自定义触发器实现和所属的自定义持久性委托的地方。
在"Main project"中,调度程序实例的配置数据是通过配置文件提供的,我在这里添加:
<add key="quartz.jobStore.driverDelegateInitString" value="triggerPersistenceDelegateClasses=SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate, SolutionName.QuartzService.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
(之前我也试过SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate
)
当我启动调度程序时,我发现尝试注册持久性委托失败:
Unhandled Exception: Quartz.SchedulerConfigException: Failure occured during job recovery. ---> Quartz.Impl.AdoJobStore.NoSuchDelegateException: Couldn't instantiate delegate: Error instantiating TriggerPersistenceDelegate of type: SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate ---> Quartz.Impl.AdoJobStore.NoSuchDelegateException: Error instantiating TriggerPersistenceDelegate of type: SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate ---> System.TypeLoadException: Could not load type 'SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate' from assembly 'Quartz, Version=2.3.0.0, Culture=neutral, PublicKeyToken=null'.
Quartz
-assembly 被明确提及让我感到困惑。我是否必须编译 Quartz 源代码,包括我的自定义持久性委托以便找到它?还是我漏掉了什么?
答案显然是:没有。
就我而言,我似乎只是使用了错误的设置名称。
我换了
<add key="quartz.jobStore.driverDelegateInitString" value="triggerPersistenceDelegateClasses=SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate, SolutionName.QuartzService.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
与
<add key="quartz.jobStore.driverDelegateInitString" value="triggerPersistenceDelegateTypes=SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate, SolutionName.QuartzService.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
现在调度程序启动时不再有任何抱怨。