我的应用程序每分钟只有一个http请求被查询。 当c3p0运行CullExpired和其他后台线程时,应用程序暂时超时并且无响应。这个问题随机发生并且偶尔发生。所有应用程序超时时的实例,我看到c3p0后台线程正在尝试执行清理或清除空闲连接。这种情况非常随机,日志中没有其他例外。一段时间后,应用程序会自动恢复并恢复处理。有没有人遇到过这样的问题。c3p0导致应用程序在偶发时间间隔超时
c3p0 version is <version>0.9.1.2</version>
hibernate version is <version>3.3.2.GA</version>
我C3P0的配置是:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close"
p:driverClass="#{['app.jdbc.driverClassName']}"
p:jdbcUrl="#{['app.jdbc.url']}"
p:user="#{['app.jdbc.username']}"
p:password="#{['app.jdbc.password']}"
p:acquireIncrement="5"
p:idleConnectionTestPeriod="80"
p:maxAdministrativeTaskTime="600"
p:numHelperThreads="10"
p:maxIdleTime="60"
p:maxPoolSize="20"
p:maxStatements="30"
p:minPoolSize="10" />
谢谢史蒂夫。我相应地更改了配置。我认为可疑的是gettables()调用在夜晚当各种数据库进程运行导致应用程序超时的一些请求变得更慢。所以我添加了preferredTestQuery选择1和testConnectionOnCheckout为true。 – user1797433
我的当前配置:<豆ID = “数据源” 类= “com.mchange.v2.c3p0.ComboPooledDataSource” \t \t破坏法= “接近” \t \t号码:driverClass =“#{['app.jdbc .driverClassName']}” \t \t号码:JDBCURL = “#{[ 'app.jdbc.url']}” \t \t号码:用户= “#{[ 'app.jdbc.username']}” \t \t号码:密码= “#{[ 'app.jdbc.password']}” \t \t号码:acquireIncrement = “5” \t \t号码:numHelperThreads = “3” \t \t号码:preferredTestQuery = “SELECT 1” \t \t号码:testConnectionOnCheckout = “真” \t \t号码:maxIdleTime = “0” \t \t号码:maxPoolSize = “40” \t \t号码:了MinPoolSize = “5” /> – user1797433
看起来好多了。它会影响你的问题吗? (顺便说一句,最好确保你得到了你认为你正在设置的配置,特别是因为你的配置环境是复杂的替代等。c3p0 PooledDataSources在INFO级别转储配置到你的日志。注意上面我的目的是为了简化,如果你使用的连接超时的数据库 - 例如mysql - 设置一个有限但大的maxIdleTime,如3600,可能是最好的。) –