我正在使用 树脂服务器 + spring 框架和 c3p0 连接池。 我已经使用以下属性文件配置了连接池。但是 以某种方式每 24 小时左右我的网站面临连接超时错误,然后我必须重新启动我的树脂服务器才能使网站重新上线。 请告诉我以下配置文件有什么问题以及我在这里遗漏了什么。
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.databaseURL=jdbc:mysql://localhost/my_database1_url
jdbc.StockDatabaseURL=jdbc:mysql://localhost/my_database2_url
jdbc.username=my_username
jdbc.password=my_password
jdbc.acquireIncrement=10
jdbc.minPoolSize=20
jdbc.maxPoolSize=30
jdbc.maxStockPoolSize=30
jdbc.maxStatements=100
jdbc.numOfHelperThreads=6
jdbc.testConnectionOnCheckout=true
jdbc.testConnectionOnCheckin=true
jdbc.idleConnectionTestPeriod=30
jdbc.prefferedTestQuery=select curdate();
jdbc.maxIdleTime=7200
jdbc.maxIdleTimeExcessConnections=5
最佳答案
所以,一堆东西。
unreturnedConnectionTimeout
定义一段时间后,c3p0 应该假定连接已经泄漏,然后关闭它。设置 debugUnreturnedConnectionStackTraces
以要求 c3p0 记录 check out 未正确检入的连接的堆栈跟踪。见 Configuring to Debug and Workaround Broken Client Applications 。 prefferedTestQuery
应该是 preferredTestQuery
。 numOfHelperThreads
应该是 numHelperThreads
。 jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.databaseURL=jdbc:mysql://localhost/my_database1_url
jdbc.StockDatabaseURL=jdbc:mysql://localhost/my_database2_url
jdbc.username=my_username
jdbc.maxStockPoolSize=30
在标准的 c3p0.properties 形式中,您可能的意思是
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcURL=jdbc:mysql://localhost/my_database1_url
# no equivalent -- jdbc.StockDatabaseURL=jdbc:mysql://localhost/my_database2_url
c3p0.user=my_username
# no equivalent -- jdbc.maxStockPoolSize=30
请参阅 Configuration Properties 。同样,c3p0 对
jdbc.
前缀属性一无所知,但也许您自己的库或中间件中的某些东西会选择这些。 注意: 我喜欢看到@NiSay 检查连接泄漏的方式,因为我喜欢看到人们使用更高级的 c3p0 API。只要您不热更新数据源的配置,它就会起作用。但是你不需要那么麻烦,并且不能保证这种方法会在 future 的版本中继续工作 c3p0 对 ConnectionCustomizer 生命周期不做任何 promise 。 ConnectionCustomizers 旨在是无状态的。使用 c3p0 的内置泄漏检查工具更容易、更安全,如上面的第一个要点所述。
关于spring-mvc - C3P0 连接池使用此配置给出连接超时错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34408362/