0
我們有一個使用Quartz進行調度作業的Java應用程序。我們使用的石英版本是石英-2.2.1。石英配置使用JDBC作業存儲。數據庫服務器重新啓動後,Quartz Scheduler無法正常啓動/恢復
這裏是與該系統中發生的事件序列:
- 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文件存在於我們的應用程序類路徑中,石英也使用c3p0連接池。在那個c3p0.properties文件中,我們設置了
c3p0.unreturnedConnectionTimeout = 3600
和c3p0.maxIdleTime = 3600
。由於事件#2(當數據庫服務器重新啓動時)和事件#3(當石英調度程序啓動時)之間的時間跨度爲1小時(3600秒),這種配置是否會導致此問題。
任何幫助將不勝感激,謝謝!
感謝您的建議!您能否幫助我理解驗證連接在結帳時如何幫助我的情況?除此之外,你認爲我們應該調整其他屬性,如c3p0.unreturnedConnectionTimeout = 3600和c3p0.maxIdleTime = 3600?最小池大小爲1. – Aman
調整是一個大問題。 ''c3p0.unreturnedConnectionTimeout'只有在你的應用程序中有一個錯誤並且它正在泄漏Connections時才相關。驗證連接將讓c3p0意識到它在關機前獲得的連接不再好。那麼c3p0會自動替換它們。 –