我们正在使用Hibernate 3 ORM开发一个java struts2框架webapplication.我们使用mysql作为我们的数据库.我们在日志中发现了一些与DB相关的异常.在配置的时间之前,与数据库的连接超时.以下是我们发现的公共异常.10434...
我们正在使用Hibernate 3 ORM开发一个java struts2框架webapplication.我们使用mysql作为我们的数据库.
我们在日志中发现了一些与DB相关的异常.在配置的时间之前,与数据库的连接超时.以下是我们发现的公共异常.
104343235 [pool-6-thread-19] ERROR org.hibernate.util.JDBCExceptionReporter - The last packet successfully received from the server was 100,838,460 milliseconds ago. The last packet sent successfully to the server was 100,838,461 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
org.hibernate.exception.JDBCConnectionException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:99)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.doList(Loader.java:2536)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
at org.hibernate.loader.Loader.list(Loader.java:2271)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at com.myproject.model.dao.entities.EntitiesDAO.getByIds(EntitiesDAO.java:148)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 100,838,460 milliseconds ago. The last packet sent successfully to the server was 100,838,461 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
at sun.reflect.GeneratedConstructorAccessor345.newInstance(Unknown Source)104343242 [pool-6-thread-16] ERROR org.hibernate.util.JDBCExceptionReporter - The last packet successfully received from the server was 100,838,544 milliseconds ago. The last packet sent successfully to the server was 100,838,544 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
104343242 [pool-6-thread-16] ERROR org.hibernate.util.JDBCExceptionReporter - The last packet successfully received from the server was 100,838,544 milliseconds ago. The last packet sent successfully to the server was 100,838,544 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3829)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2449)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2629)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2719)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2318)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1953)
at org.hibernate.loader.Loader.doQuery(Loader.java:802)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
at org.hibernate.loader.Loader.doList(Loader.java:2533)
... 21 more
我们每天都在重新启动我们的应用服务器作为问题的一个临时解决方案.
任何帮助将受到高度赞赏.
解决方法:
发生这种情况是因为MySQL服务器在超时后终止没有活动的连接.
您需要在dbcp配置中添加几行
尝试添加以下参数:
validationQuery="SELECT 1"
testOnBorrow="true
工作原理:连接池在返回连接之前尝试运行validationQuery.如果validationQuesry失败,dbcp将丢弃该连接,创建一个新连接并将其返回.
这是一个例子:
<Resource name="jdbc/cooldatabase"
description="Strandls.com license database"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/cooldatabase?autoReconnect=true"
username="cooluser"
password="coolpassword"
initialSize="0"
maxActive="20"
maxIdle="10"
minIdle="0"
maxWait="-1"
validationQuery="SELECT 1"
testOnBorrow="true"
poolPreparedStatements="true"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"/>
您可以在这里找到完整的详细信息:http://amitcodes.wordpress.com/2008/07/26/16/
本文标题为:java – Hibernate / mysql连接问题
基础教程推荐
- Spring学习通过AspectJ注解方式实现AOP操作 2022-11-28
- 远程调用@FeignClient注解属性使用详解 2023-06-17
- Java多线程wait()和notify()方法详细图解 2023-06-30
- java – Spring Boot无法运行schema.sql,依赖于spring-cloud-starter-config 2023-10-29
- Java解决代码重复的三个绝招分享 2023-03-06
- 在IDEA中运行Java程序 2023-10-08
- 在没有* toInstant()的情况下将java.util.Date截断为LocalDate *,因为java.sql.Date给出了UnsupportedOperationException 2023-10-30
- java封装及四种权限修饰符详解 2023-03-30
- Java用邻接矩阵存储图的示例代码 2023-01-18
- java实现两张图片2D翻转动画效果 2023-04-22
