如何配置Hibernate以使用DBCP2连接池?

时间:2016-10-31 19:59:16

标签: hibernate tomcat

我正在使用Tomcat和Hibernate开发Web应用程序。上传并启动应用程序后,我的服务器日志会返回以下消息:

  

错误org.hibernate.engine.jdbc.spi.SqlExceptionHelper-从服务器成功收到的最后一个数据包是193,600毫秒前。成功发送到服务器的最后一个数据包是193,601毫秒前。比服务器配置的'wait_timeout'值长。您应该考虑在应用程序中使用之前过期和/或测试连接有效性,增加服务器配置的客户端超时值,或使用Connector / J连接属性“autoReconnect = true”来避免此问题。

关于这个问题的许多类似问题说我需要使用像c3p0或DBCP这样的连接池来解决它。我决定使用DBCP2并在Maven中添加了commons-dbcp2和commons-pool2作为依赖项,遵循了Internet示例中的许多建议。出于某种原因,官方DBCP documentation目前没有提供任何示例。

还在我的hibernate.cfg.xml中添加了以下行:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>

    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://server.org:3306/database?zeroDateTimeBehavior=convertToNull</property>
    <property name="hibernate.connection.username">user</property>
    <property name="hibernate.connection.password">password</property>
    <property name="hibernate.current_session_context_class">thread</property>

    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.query.factory_class">org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory</property>

    <property name="hibernate.hbm2ddl.auto">update</property>

    <property name="hibernate.dbcp.initialSize">5</property>
    <property name="hibernate.dbcp.maxTotal">20</property>
    <property name="hibernate.dbcp.maxIdle">10</property>
    <property name="hibernate.dbcp.minIdle">5</property>
    <property name="hibernate.dbcp.maxWaitMillis">-1</property>

    <!-- Mapping -->

  </session-factory>
</hibernate-configuration>

此外,重启后我仍会在服务器日志中收到此消息:

  

WARN org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl- HHH000402:使用Hibernate内置连接池[不供生产使用!]

当然我做错了什么。但由于DBCP文档没有提供任何示例。我无法找到必须采取的措施来纠正它。

如果有人能帮我解决这个问题,我真的很感激。

1 个答案:

答案 0 :(得分:0)

您使用的是什么版本的 commons-dbcp2 commons-pool2 ?您不必在pom中指定 commons-pool2 ,因为它将作为 commons-dbcp2 的一部分包含在内。

通过使用 commons-dbcp2 中包含的 commons-pool2 的不同版本声明 commons-pool2 ,可能会出现依赖性问题。