`
xupo
  • 浏览: 214948 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate连接数据库超时设置autoReconnect=true

阅读更多

 Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 43,369,020 milliseconds ago. The last packet sent successfully to the server was 43,369,020 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.NativeConstructorAccessorImpl.newInstance0(Native Method)
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
     at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
     at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
     at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3313)
     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1940)
     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2109)
     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2648)
     at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2077)
     at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2228)
     at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
     at org.hibernate.loader.Loader.getResultSet(Loader.java:1778)
     at org.hibernate.loader.Loader.doQuery(Loader.java:662)
     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
     at org.hibernate.loader.Loader.doList(Loader.java:2211)
     at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095)
     at org.hibernate.loader.Loader.list(Loader.java:2090)
     at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:388)
     at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
     at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
     at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
     at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
     at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:64)
     at com.worldepop.core.business.impl.JPAVirtualTransactionManagerImpl.getAllTransaction(JPAVirtualTransactionManagerImpl.java:86)
     at com.worldepop.web.timer.VirtualTransactionTimer.run(VirtualTransactionTimer.java:51)
     at java.util.TimerThread.mainLoop(Timer.java:512)
     at java.util.TimerThread.run(Timer.java:462)
    Caused by: java.net.SocketException: 断开的管道
     at java.net.SocketOutputStream.socketWrite0(Native Method)
     at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
     at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
     at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
     at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
     at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3294)
解决办法:

如果连接闲置过长 (长时间内没有进行数据库操作), mysql就会自动断开连接, 要重启tomcat.  
    不用hibernate的话, connection url加参数: autoReconnect=true

    用hibernate的话, 加如下属性: 

        

<property name="connection.autoReconnect">true</property>

        <property name="connection.autoReconnectForPools">true</property>  
        <property name="connection.is-connection-validation-required">true</property>

   
    要是还用c3p0连接池: 

        

<property name="hibernate.c3p0.acquire_increment">1</property>  
        <property name="hibernate.c3p0.idle_test_period">0</property> 

        <property name="hibernate.c3p0.timeout">0</property>

<property name="hibernate.c3p0.validate">true</property>

   

由于问题产生的根本原因在于服务到数据库的连接长时间没活动,既然重新连接的办法无效,就可以尝试另外一种办法,就是反空闲。
自己写一个线程来反空闲的话,比较麻烦。
最后在网上找到一个办法。为hibernate配置连接池,推荐用c3p0,然后配置c3p0的反空闲设置idle_test_period,只要小于MySQL的wait timeout即可。
在hibernate.cfg.xml中的c3p0链接池的配置中增加下面项:
<!-- configuration pool via c3p0-->

<property name="c3p0.idle_test_period">120</property>  <!-- seconds --><!-- default: 0 --> 

 

分享到:
评论

相关推荐

    hibernate自动重新连接数据库proxool的使用

    例如,设置`hibernate.proxool.statistics`为`true`,可以开启统计信息,便于分析连接池的使用情况。 在应用运行过程中,如果检测到数据库连接断开,`Hibernate`会根据配置的`Proxool`参数尝试重新建立连接。这大大...

    hibernate多数据库配置

    autoReconnect=true&amp;zeroDateTimeBehavior=convertToNull"/&gt; &lt;bean name="userDataSource" parent="parentDataSource"&gt; &lt;property name="url" value="jdbc:mysql://127.0.0.1:3306/tieba?...

    dbcp连接池优化

    5. **设置超时参数**: - `maxWait`: 当所有连接都被占用时,请求者等待新连接的最大时间。合理设置可防止长时间阻塞。 #### 四、Tomcat DBCP连接池参数详解 为了更好地理解如何优化DBCP连接池,下面详细介绍一些...

    MySQL数据库连接超时(Wait_timeout)问题总结.pdf

    当应用程序遇到这种问题时,一种常见的解决方案是在数据库连接字符串中添加"autoReconnect=true"选项,试图在断开连接后自动重新连接。然而,对于MySQL 4.0之前的版本,这种方法可能有效,但在较新的MySQL版本中,...

    基于springboot的一个IT人才招聘网站系统源码+数据库+部署文档,公司可以发布岗位需求,求职者查找岗位并递交简历等

    serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false username: root password: 123456 默认用户名和密码为 root / 123456 默认数据库名为:...

    SpringBoot初学者教程 IDEA数据库配置-迅速爬坑上手

    useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&useSSL=false&allowMultiQueries=true spring.datasource.username=你的数据库账号 spring.datasource.password=你的...

    关于MySQL的wait-timeout连接超时问题报错解决方案.pdf

    4. 考虑使用 Connector/J 连接属性:在使用 Hibernate 进行数据库操作时,可以考虑使用 Connector/J 连接属性,例如 autoReconnect=true,来避免连接超时问题。 5. 及时释放连接:在使用完毕连接后,需要及时释放...

    关于MySQL的wait-timeout连接超时问题报错解决方案.docx

    3. 使用 Connector/J 连接属性 'autoReconnect=true',避免连接超时的问题。 结论 MySQL 连接超时问题是常见的错误之一,解决该问题需要了解 wait_timeout 参数的重要性,并正确地使用 show variables 命令。同时...

    java连接各种数据库连接串.docx

    autoReconnect=true&sessionVariables=sql_mode='PIPES_AS_CONCAT'`,其中`127.0.0.1`是服务器IP,`db`是数据库名,`autoReconnect`和`sql_mode`是额外的连接参数。 - 对于Oracle,连接字符串可能是`jdbc:oracle:...

    基于springboot的一个IT人才招聘网站系统源码+数据库+部署文档(高分毕业设计)

    基于springboot的一个IT人才招聘...serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false username: root password: 123456 默认用户名和密码为 root /

    Java连接数据库小错误QAQ

    当数据库连接因某种原因断开后,如果设置为true,JDBC驱动会尝试重新建立连接。这对于长时间运行的数据库操作或者应用服务器重启后很有用。 3. **useSSL=false**:此参数控制是否使用SSL(Secure Sockets Layer)...

    MySQL wait_timeout连接超时

    3. **使用`autoReconnect=true`属性**:如果你的应用使用的是MySQL的JDBC驱动,可以在连接字符串中添加`autoReconnect=true`属性。这将使驱动在检测到连接断开后尝试重新建立连接。然而,这种方法并非总是可靠,因为...

    学生选课系统学年设计(jsp,servlet,mysql,tomcat)

    maxWait="10000" username="(此处填你的数据库用户名)" password="(此处填你的数据库密码)" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/ccs?autoReconnect=true" /&gt; ...

    c3p0 重新自动连接

    c3p0 重新自动连接 c3p0 重新自动连接 c3p0 重新自动连接 &autoReconnect=true

    java微信商城完整源码数据库 MySQL源码类型 WebForm

    true&characterEncoding\=UTF-8&autoReconnect\=true 4、重启Tomcat。 后台路径:http://域名/admin 后台用户名:admin 密码:admin 后台功能:系统设置、管理员列表、文章栏目、文章管理、产品管理、留言管理

    JDBC连接多种数据库的方法

    useUnicode=true&characterEncoding=utf8&autoReconnect=true"; ``` 除了SQL Server,JDBC还支持其他数据库系统,如MySQL、Oracle、PostgreSQL等。每个数据库都有其特定的驱动和连接参数。例如,对于MySQL,我们...

    bbs论坛源码jsp版

    useUnicode=true&characterEncoding=GB2312&autoReconnect=true jdbc.username.mysql=root jdbc.password.mysql=root 3、 Web容器:tomcat6.x 4、 页面访问路径: 论坛首页: http://localhost:8080/bbs 后台管理...

    Spring Boot 配置MySQL数据库重连的操作方法

    要解决连接超时问题,我们可以在连接 URL 上添加 autoReconnect=true 来解决。例如: jdbc:mysql://localhost:3306/test?autoReconnect=true 然而,需要注意的是,MySQL 不推荐使用 autoReconnect 配置,因为如果...

    经过改造可以修改Apache James邮件账户密码的WebMail Claros Intouch2

    autoReconnect=true&#38;characterEncoging=utf8&#38;zeroDateTimeBehavior=convertToNull 3. 完整的配置参数参考intouch2.war!\WEB-INF\config\config.xml 4. 配置文件config.xml中的mail.upflow.com换成实际的...

    生产环境高可用Nacos集群

    characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.url.1=jdbc:mysql://11.163.152.9:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&...

Global site tag (gtag.js) - Google Analytics