当前位置: 首页 > 面试题库 >

使用Hibernate和Apache DBCP的MySQL连接池问题

叶鹭洋
2023-03-14
问题内容

似乎与我的应用程序有关。每当启动应用程序很长时间(不确定确切的时间)后,我的日志中都会出现以下错误消息。我正在使用Spring + Hibernate +
MySQL和ApacheDBCP进行连接池

ERROR [org.hibernate.util.JDBCExceptionReporter]The last packet successfully received from the server was 74,188,684 milliseconds ago. 
The last packet sent successfully to the server was 74,188,685 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

如果我重新启动URL,则一切正常。我认为这与我的连接池有关。这是我的Apache
DBCP设置,MYSQL中的wait_timeout设置为其默认值。(28800秒或8小时)。

<beans:bean id="MyID" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <beans:property name="url" value="jdbc:mysql://localhost:17761/myDB"/>
        <beans:property name="username" value="myname"/>
        <beans:property name="password" value="mypwd"/>
        <beans:property name="maxIdle" value="5"/>
        <beans:property name="maxActive" value="20"/>
        <beans:property name="minIdle" value="5"/>
</beans:bean>

在搜索的同时,我发现此链接可以解决此问题。

  1. 使用autoReconnect = true配置连接字符串

这将有助于解决问题吗?在上面提到的同一问题中,另一位作者说,建议不要使用此解决方案。

  1. 增加MySQL服务器变量wait_timeout的值。

我不确定这将如何解决错误。如果有帮助,如何计算适当的wait_timeout值。我的意思是应该根据什么条件?

  1. 配置连接池以测试连接的有效性。

经过研究,我知道可以在进行实际查询之前使用validationQuery =“ SELECT 1”来检查连接性,这对解决问题有帮助吗?是否会影响性能?

问题不仅是特定于Apache DBCP的,我也在C3P0中看到过。

请帮忙。


问题答案:

看来我找到了解决方案。我所做的就是在servlet-context.xml中添加以下行。仍在检查这条线的性能影响

<beans:property name="validationQuery" value="SELECT 1"/>

问题仍然存在,为什么我实际上得到了错误?:)



 类似资料:
  • 问题内容: 我似乎无法hibernate使用c3p0进行连接池,它说 hibernate配置: 问题答案:

  • 以下代码: hibernate.cfg.xml: hibernateutil.java: 为了获得最好的帮助,当我尝试连接this Web服务时,请在Android Studio中查看my应用程序的日志: org.hibernate.exception.internal.standardsqlexceptionconverter.convert(standardsqlexceptionconver

  • 问题内容: 只是从github交叉发布。 我将xorm 0.4.3与go-mysql一起使用。我们使用Golang 1.4。 我们在和中指定了以下内容: 而且我们使用相同的单个实例来查询Mysql。 但是我们仍然看到很多连接的状态,这是远远超过这些数字我已经配置和 我们国家的时候- 我们还观察到,即使我们停止MySQL,连接号仍保持固定但处于状态。如果我们关闭应用程序,则所有连接都会消失。 但是在

  • 我有一个使用Struts1.3、Hibernate3和Spring Security开发的web应用程序。由于MySQL在此时间之后关闭了连接,该应用程序在8小时后就停止了运行。然后我从几个帖子中收集信息,使它保持很长时间,现在差不多是20-24小时。有没有人能帮我把这东西弄好。 摘要 Iam在不活动20小时后无法登录。连接被MySQL关闭。 多谢了。 C3p0日志 INFO AbstractPo

  • 问题内容: 自上次发布以来,是否提出了所有建议的更改,但此问题仍然困扰着我。这是我得到的错误: 这是我的hibernate.cfg.xml 和c3p0.properties 问题答案: 对于我来说,您配置的c3p0错误。 诸如c3p0.preferredTestQuery之类的属性必须位于类路径中的c3p0.properties文件中(例如WEB-INF / classes)。 下面是我的c3p0

  • 问题内容: 我试图弄清楚如何构造我的应用程序以最有效地使用MySQL。我正在使用node- mysql模块。这里的其他线程建议使用连接池,因此我设置了一个小模块mysql.js 现在,每当我要查询mysql时,我都需要此模块,然后查询数据库 这是好方法吗?除了非常简单的示例(其中所有操作均在主app.js脚本中完成)之外,我真的找不到太多的使用mysql连接的示例,因此我真的不知道约定/最佳实践是