我在使用我的hinermate连接配置c3p0连接池时遇到了一些问题 .

我已将wait_for我的MySQL服务器设置为180秒 .

我还在我的hibernate属性文件中设置了以下参数:

properties.put("hibernate.connection.driver_class", JDBC_DRIVER);
properties.put("hibernate.connection.url", JDBC_URL);
properties.put("hibernate.connection.username", JDBC_USER);
properties.put("hibernate.connection.password", JDBC_PASSWORD);
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
properties.put("hibernate.show_sql", false);
properties.put("hibernate.connection.provider_class", "org.hibernate.connection.C3P0ConnectionProvider");
properties.put("hibernate.c3p0.min_size", 1);
properties.put("hibernate.c3p0.max_size", 10);
properties.put("hibernate.c3p0.max_statements", 8 );

我创建了一个c3p0属性文件并将其添加到我的资源文件夹中 . 该文件的内容如下:

c3p0.testConnectionOnCheckout=true

就这些 . 这是我在特定配置文件中留下的所有内容,因为我读到某些属性只能在此文件中设置 . 加载应用程序c3p0初始化后,我打印出以下日志消息:

INFO:初始化c3p0池... com.mchange.v2.c3p0.PoolBackedDataSource@b014587e [connectionPoolDataSource - > com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@5e2902db [acquireIncrement - > 3,acquireRetryAttempts - > 30,acquireRetryDelay - > 1000 ,autoCommitOnClose - > false,automaticTestTable - > null,breakAfterAcquireFailure - > false,checkoutTimeout - > 0,connectionCustomizerClassName - > null,connectionTesterClassName - > com.mchange.v2.c3p0.impl.DefaultConnectionTester,debugUnreturnedConnectionStackTraces - > false,factoryClassLocation - > null ,forceIgnoreUnresolvedTransactions - > false,identityToken - > 1hge17r9d37v2wm1n57lrr | ba81af,idleConnectionTestPeriod - > 0,initialPoolSize - > 1,maxAdministrativeTaskTime - > 0,maxConnectionAge - > 0,maxIdleTime - > 0,maxIdleTimeExcessConnections - > 0,maxPoolSize - > 10,maxStatements - > 8,maxStatementsPerConnection - > 0,minPoolSize - > 1,nestedDataSource - > com.mchange.v2.c3p0.DriverManagerDataSource@d4187fd7 [description - > null ,driverClass - > null,factoryClassLocation - > null,identityToken - > 1hge17r9d37v2wm1n57lrr | 1434751,jdbcUrl - > jdbc:mysql:// localhost:3306 / whatever?characterEncoding = UTF-8,properties - > {user = ***** *,password = ******}],preferredTestQuery - > null,propertyCycle - > 0,statementCacheNumDeferredCloseThreads - > 0,testConnectionOnCheckin - > false,testConnectionOnCheckout - > true,unreturnedConnectionTimeout - > 0,usesTraditionalReflectiveProxies - > false; userOverrides:{}],dataSourceName - > null,factoryClassLocation - > null,identityToken - > 1hge17r9d37v2wm1n57lrr | 2a237a,numHelperThreads - > 3]

似乎一切都在设定中 .

我开始配置此连接池,因为在获得第一个连接8小时后,我在服务器上遇到管道损坏问题 . 所以作为一个测试,我设置wait_timeout没有服务器,正如我提到的180秒,并在我尝试进行数据库调用后遇到问题:

引起:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功收到的最后一个数据包是xxx毫秒前 . 成功发送到服务器的最后一个数据包是xxx毫秒前 . 比服务器配置的'wait_timeout'值长 . 您应该考虑在应用程序中使用之前过期和/或测试连接有效性,增加服务器配置的客户端超时值,或使用Connector / J连接属性“autoReconnect = true”来避免此问题 . 引起:java.net.SocketException:管道损坏

我使用以下相关的maven依赖项:

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.0.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-c3p0</artifactId>
        <version>5.0.0.Final</version>
    </dependency>

什么是最简单的我设置c3p0以避免这个管道问题 .

我已经尝试过使用数字,idleConnectionTestPeriod的preferredTestQuery = Select 1方法,似乎没有什么可以做的 .

我可能会遗漏一些非常简单的东西,我可以使用一些指导 .

谢谢,彼得