我正在使用Quartz.NET作为我的Windows服务的嵌入式调度程序。
Quartz配置为使用AdoJobStore
,每当SQL服务器因任何原因不可用时,Quartz会抛出Quartz.JobPersistenceException
异常,这会导致我的Windows服务无效。
显然,Quartz IScheduler
已经实例化,并且从try...catch
我的服务OnStart
内的IScheudler
块内启动,但一旦catch
启动并运行任何异常抛出通过Quartz不再被ConnectionAndTransactionHolder
块捕获......
欢迎任何关于如何防止Quartz异常在这种情况下杀死我的Windows服务的想法......
我知道我可以将服务设置为在服务的“恢复”选项卡中崩溃后重新启动,但它是一个补丁,而不是真正的解决方案......
编辑:
当方法无法获取并打开数据库连接或对JobStoreSupport
的调用失败时,会从Quartz.NET库的BeginTransaction
类的JobPersistenceException
方法中抛出这些异常。由于Quartz.NET是开源的,我可以访问这些代码,我可以只注释抛出这些{{1}}异常的代码,但是没有详细分析Quartz.NET的源代码我不知道会有什么影响如果Quartz继续尝试扫描触发器,直到数据库连接再次可用,那么...我也不确定许可协议是否允许修改源代码......