Hibernate + c3p0连接重新打开

时间:2015-11-15 14:57:11

标签: java mysql spring hibernate c3p0

我在使用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初始化后,我打印出以下日志消息:

  

信息:初始化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,属性    - > {user = ******,password = ******}],preferredTestQuery - > null,propertyCycle - > 0,statementCacheNumDeferredCloseThreads - > 0,   testConnectionOnCheckin - > false,testConnectionOnCheckout - >真正,   unreturnedConnectionTimeout - > 0,usesTraditionalReflectiveProxies - >   假; userOverrides:{}],dataSourceName - >空值,   factoryClassLocation - > null,identityToken - >   1hge17r9d37v2wm1n57lrr | 2a237a,numHelperThreads - > 3]

似乎一切都已设定。

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

引起:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 从服务器成功接收的最后一个数据包是xxx 几毫秒之前。成功发送到服务器的最后一个数据包是 xxx毫秒前。比配置的服务器长 'wait_timeout'的值。你应该考虑到期和/或 在您的应用程序中使用前测试连接有效性,增加 服务器配置的客户端超时值,或使用 连接器/ 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方法,似乎没什么可诡计。

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

谢谢, 彼得

0 个答案:

没有答案