当前位置: 首页 > 知识库问答 >
问题:

数据库服务器重新启动后Quartz计划程序无法正确启动/恢复

洪鸿博
2023-03-14

我们有一个Java应用程序,它使用Quartz来调度作业。我们使用的quartz版本是Quartz-2.2.1。quartz配置使用JDBC作业存储。

以下是系统中发生的事件序列:

    null
2017-05-28 00:05:45 [WARNING] [c3p0] A PooledConnection that has already signalled a Connection error is still in use!
2017-05-28 00:05:45 [WARNING] [c3p0] Another error has occurred [ com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed. ] which will not be reported to listeners!
2017-05-28 00:05:45 com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed.
2017-05-28 00:05:45     at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
2017-05-28 00:05:45     at com.microsoft.sqlserver.jdbc.SQLServerConnection.checkClosed(SQLServerConnection.java:388)
2017-05-28 00:05:45     at com.microsoft.sqlserver.jdbc.SQLServerConnection.setAutoCommit(SQLServerConnection.java:1883)
2017-05-28 00:05:45     at com.mchange.v2.c3p0.impl.NewProxyConnection.setAutoCommit(NewProxyConnection.java:1568)
2017-05-28 00:05:45     at org.quartz.impl.jdbcjobstore.AttributeRestoringConnectionInvocationHandler.restoreOriginalAtributes(AttributeRestoringConnectionInvocationHandler.java:141)
2017-05-28 00:05:45     at org.quartz.impl.jdbcjobstore.JobStoreSupport.cleanupConnection(JobStoreSupport.java:3600)
2017-05-28 00:05:45     at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3819)
2017-05-28 00:05:45     at org.quartz.impl.jdbcjobstore.JobStoreSupport.recoverJobs(JobStoreSupport.java:834)
2017-05-28 00:05:45     at org.quartz.impl.jdbcjobstore.JobStoreSupport.schedulerStarted(JobStoreSupport.java:690)
2017-05-28 00:05:45     at org.quartz.core.QuartzScheduler.start(QuartzScheduler.java:567)
2017-05-28 00:05:45     at org.quartz.impl.StdScheduler.start(StdScheduler.java:142)

我的问题是,当quartz调度器启动时,数据库已经启动--那么为什么它会抱怨连接已经关闭?我知道它在内部使用c3p0连接池,应用程序在签出时不验证连接。c3p0连接池是否关闭quartz调度程序正在使用的连接(处于待机模式)?

我正在试图理解这个异常背后的原因,以及可以做哪些配置更改来防止它?

  1. 在quartz属性文件中签出时是否要验证连接?对这里有帮助吗?
  2. 我们的应用程序类路径中有c3p0.properties文件,quartz也使用c3p0连接池。在那个c3p0.properties文件中,我们设置了c3p0.UnreturdConnectionTimeout=3600c3p0.maxidleTime=3600。此配置是否会导致此问题,因为事件#2(数据库服务器重新启动时)和事件#3(quartz scheduler启动时)之间的时间跨度约为1小时(3600秒)。

共有1个答案

百里修真
2023-03-14

也许您应该在签出时验证连接,设置C3P0.TestConnectionOnCheckout=true

有关良好连接测试设置的更多信息,请参见C3P0关于该主题的文档。

 类似资料:
  • 我正在使用 Windows 服务器 2016 数据中心。每当服务器重新启动时,我在任务计划程序中的计划任务总是停止运行。只有在我手动进入应用程序并重新键入我的用户帐户密码后,它才会再次开始工作。这是设置还是条件问题?

  • 服务器重启后无法启动Apache HTTPD。我们 /etc/httpd/conf/拥有功能。用户/组。因此,我们使用脚本来启动httpd.conf每次服务器重启时,我们都无法启动HTTPD。我们发现 /var/run/httpd在重启后被更改为apache/root。因此,脚本无法启动功能下的HTTPD。用户/组。 请帮帮我!!!

  • 问题内容: 我的日食没有启动,因为我的计算机有点死机了,所以我不得不强制重新启动它。当我不得不重新启动时,Eclipse是打开的,我相信这很可能是原因。我不知道该如何解决。每当我尝试打开它时,它都会告诉我检查工作区中的.log文件,并显示: http://paste.strictfp.com/26579 而且我不知道如何解决它。请帮忙? 问题答案: 您缺少 第125行的 类,您必须重新安装才能解决

  • 我正在使用下面的代码安排作业。 上述代码的问题是,调度器仅在服务器会话之前有效。一旦执行了这个方法,我想在提到的时间触发schedulerjob,即使在服务器重启之后也是如此。有没有办法在liferay中实现这一点?

  • 问题内容: 我注意到,在一些服务器上重新启动/关闭后,SQL Agent不会自动启动(SQL Server启动正常)。该服务设置为在Windows中自动启动。当我们手动启动SQL代理时,它会正常启动。 问题答案: 在以下路径中添加Windows级用户: 单击开始-运行 -Secpol.msc 转到: 本地策略-用户权限分配 确保您在其下运行SQL Agent Service的用户帐户具有以下分配:

  • 我希望容器在计算机重新启动后自动启动,所以我使用'--restart=always'标志,但它并没有像我预期的那样运行。当我重新启动系统时,容器没有启动。 docker日志信息 添加docker ps-a message,$docker ps-a CONTAINER ID IMAGE命令CREATED STATUS PORTS NAMES a1f4d5471b0a mysql:8.0“docker