【发布时间】:2017-06-14 17:50:05
【问题描述】:
我们有一个使用 Quartz 调度作业的 Java 应用程序。我们使用的石英版本是quartz-2.2.1。石英配置使用 JDBC 作业存储。
这是系统发生的一系列事件:
- Quartz 调度程序通过属性文件配置并处于待机模式。
- quartz 配置所引用的数据库服务器作为计划维护的一部分重新启动。它会在 10 分钟内出现。
- 数据库启动后,Quartz调度器启动,抛出连接关闭异常。
这是错误:
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)
我的问题是,在石英调度程序启动时,数据库已启动 - 那么为什么它抱怨该连接已关闭?我知道它在内部使用 c3p0 连接池,并且应用程序不会在结帐时验证连接。 c3p0 连接池是否会关闭石英调度程序正在使用的连接(处于待机模式)?
我正在尝试了解此异常背后的原因以及可以进行哪些配置更改来防止它?
- 我应该在石英属性文件中验证连接吗?在这里会有帮助吗?
- 我们的应用程序类路径中有 c3p0.properties 文件,quartz 也使用 c3p0 连接池。在那个 c3p0.properties 文件中,我们设置了
c3p0.unreturnedConnectionTimeout = 3600和c3p0.maxIdleTime = 3600。此配置是否会导致此问题,因为事件 #2(数据库服务器重新启动时)和事件 #3(石英调度程序启动时)之间的时间跨度约为 1 小时(3600 秒)。
任何帮助将不胜感激,谢谢!
【问题讨论】:
标签: java quartz-scheduler c3p0