我正在使用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文档没有提供任何示例。我无法找到必须采取的措施来纠正它。
如果有人能帮我解决这个问题,我真的很感激。
答案 0 :(得分:0)
您使用的是什么版本的 commons-dbcp2 和 commons-pool2 ?您不必在pom中指定 commons-pool2 ,因为它将作为 commons-dbcp2 的一部分包含在内。
通过使用 commons-dbcp2 中包含的 commons-pool2 的不同版本声明 commons-pool2 ,可能会出现依赖性问题。