Java 石英调度器不';t在数据库服务器重新启动后正确启动/恢复

Java 石英调度器不';t在数据库服务器重新启动后正确启动/恢复,java,quartz-scheduler,c3p0,Java,Quartz Scheduler,C3p0,我们有一个Java应用程序,它使用Quartz来调度作业。我们使用的石英版本是quartz-2.2.1。quartz配置使用JDBC作业存储 以下是系统发生的事件顺序: Quartz调度程序通过属性文件配置,并处于待机模式 石英配置引用的数据库服务器将作为计划维护的一部分重新启动。10分钟后就出来了 数据库启动后,Quartz scheduler启动,并抛出连接关闭的异常 以下是错误: 2017-05-28 00:05:45 [WARNING] [c3p0] A PooledConnection

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

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

  • Quartz调度程序通过属性文件配置,并处于待机模式
  • 石英配置引用的数据库服务器将作为计划维护的一部分重新启动。10分钟后就出来了
  • 数据库启动后,Quartz scheduler启动,并抛出连接关闭的异常
  • 以下是错误:

    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 scheduler启动时,数据库已启动-那么为什么它会抱怨连接已关闭?我知道它在内部使用c3p0连接池,并且应用程序在签出时不验证连接。c3p0连接池是否关闭quartz计划程序正在使用的连接(在待机模式下)

    我正在试图了解此异常背后的原因,以及可以通过哪些配置更改来防止此异常

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

  • 任何帮助都将不胜感激,谢谢

    可能您应该在签出时验证连接,设置
    c3p0.testConnectionOnCheckout=true


    有关良好连接测试设置的更多信息,请参阅。

    谢谢您的建议!你能帮我理解在结帐时验证连接对我的情况有什么帮助吗?除此之外,您认为我们是否应该调优其他属性,如c3p0.unreturnedConnectionTimeout=3600和c3p0.maxIdleTime=3600?最小池大小为1。调整是一个大问题<代码>c3p0。只有当应用程序中存在错误且连接泄漏时,unreturnedConnectionTimeout才相关。验证连接将使c3p0意识到其在停堆前获得的连接不再良好。然后c3p0将自动替换它们。