为什么 Quartz .NET 3.0.7 调度程序挂起 DB 不可用错误

如何解决为什么 Quartz .NET 3.0.7 调度程序挂起 DB 不可用错误

我在 C# 控制台应用程序(作为 Windows 服务运行)中遇到了一个非常简单的非集群石英服务器的问题。它包括一个调度程序,它读取和写入单个数据库,这意味着同一组“qrtz_*”表。 偶尔,主要是在周末晚上,当我工作的公司执行数据库备份和一般维护时,我设置的调度程序侦听器会抛出

    QuartzSchedulerListener

Scheduler Error -> MESSAGE: An error occurred while scanning for the next trigger to fire.

Couldn't acquire next trigger: Fatal error encountered during command execution.

at Quartz.Impl.AdoJobStore.JobStoreSupport.d__229.MoveNext() in C:\projects\quartznet\src\Quartz\Impl\AdoJobStore\JobStoreSupport.cs:line 2688 --- End of stack trace from prevIoUs location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Quartz.Impl.AdoJobStore.JobStoreSupport.d__262`1.MoveNext() in C:\projects\quartznet\src\Quartz\Impl\AdoJobStore\JobStoreSupport.cs:line 3816 --- End of stack trace from prevIoUs location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptiondispatchInfo.Throw() at Quartz.Impl.AdoJobStore.JobStoreSupport.d__262`1.MoveNext() in C:\projects\quartznet\src\Quartz\Impl\AdoJobStore\JobStoreSupport.cs:line 3831 --- End of stack trace from prevIoUs location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Quartz.Impl.AdoJobStore.JobStoreSupport.d__228.MoveNext() in C:\projects\quartznet\src\Quartz\Impl\AdoJobStore\JobStoreSupport.cs:line 2542 --- End of stack trace from prevIoUs location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at Quartz.Core.QuartzSchedulerThread.d__28.MoveNext() in C:\projects\quartznet\src\Quartz\Core\QuartzSchedulerThread.cs:line 262

我假设由于数据库暂时不可用。

然后,有时,它只是挂起并停止执行任何触发器 - 它不会更新触发器的 NEXT_FIRE_TIME,我只能重新启动控制台应用程序(重新配置调度程序并重新启动它)。

我尝试在调度程序配置连接字符串中增加 dbCOMmandTimeout,但它看起来好像陷入了某种死锁。

PS:我有一个类似的设置,一组从几个数据库读取/写入的石英 2.6.1 调度程序。他们在数据库维护方面遇到了同样的错误,但在一年多的活动中他们从未停止过。

我的想法已经用完了,请让我知道是否有人遇到过这种情况。

谢谢

解决方法

我们在 Quartz 版本 https://github.com/quartznet/quartznet/blob/main/changelog.md

我认为你必须将 Quartz 更新到至少 3.1,其中一些关于数据库不可用的死锁问题已得到修复:

还有一个非常重要的错误修复,用于重试锁定处理。在某些情况下,数据库锁处理可能会出现死锁。

希望它能帮助我,因为它帮助了我。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?