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.statistics`为`true`,可以开启统计信息,便于分析连接池的使用情况。 在应用运行过程中,如果检测到数据库连接断开,`Hibernate`会根据配置的`Proxool`参数尝试重新建立连接。这大大...
autoReconnect=true&zeroDateTimeBehavior=convertToNull"/> <bean name="userDataSource" parent="parentDataSource"> <property name="url" value="jdbc:mysql://127.0.0.1:3306/tieba?...
5. **设置超时参数**: - `maxWait`: 当所有连接都被占用时,请求者等待新连接的最大时间。合理设置可防止长时间阻塞。 #### 四、Tomcat DBCP连接池参数详解 为了更好地理解如何优化DBCP连接池,下面详细介绍一些...
当应用程序遇到这种问题时,一种常见的解决方案是在数据库连接字符串中添加"autoReconnect=true"选项,试图在断开连接后自动重新连接。然而,对于MySQL 4.0之前的版本,这种方法可能有效,但在较新的MySQL版本中,...
serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false username: root password: 123456 默认用户名和密码为 root / 123456 默认数据库名为:...
useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&useSSL=false&allowMultiQueries=true spring.datasource.username=你的数据库账号 spring.datasource.password=你的...
4. 考虑使用 Connector/J 连接属性:在使用 Hibernate 进行数据库操作时,可以考虑使用 Connector/J 连接属性,例如 autoReconnect=true,来避免连接超时问题。 5. 及时释放连接:在使用完毕连接后,需要及时释放...
3. 使用 Connector/J 连接属性 'autoReconnect=true',避免连接超时的问题。 结论 MySQL 连接超时问题是常见的错误之一,解决该问题需要了解 wait_timeout 参数的重要性,并正确地使用 show variables 命令。同时...
autoReconnect=true&sessionVariables=sql_mode='PIPES_AS_CONCAT'`,其中`127.0.0.1`是服务器IP,`db`是数据库名,`autoReconnect`和`sql_mode`是额外的连接参数。 - 对于Oracle,连接字符串可能是`jdbc:oracle:...
基于springboot的一个IT人才招聘...serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false username: root password: 123456 默认用户名和密码为 root /
当数据库连接因某种原因断开后,如果设置为true,JDBC驱动会尝试重新建立连接。这对于长时间运行的数据库操作或者应用服务器重启后很有用。 3. **useSSL=false**:此参数控制是否使用SSL(Secure Sockets Layer)...
3. **使用`autoReconnect=true`属性**:如果你的应用使用的是MySQL的JDBC驱动,可以在连接字符串中添加`autoReconnect=true`属性。这将使驱动在检测到连接断开后尝试重新建立连接。然而,这种方法并非总是可靠,因为...
maxWait="10000" username="(此处填你的数据库用户名)" password="(此处填你的数据库密码)" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/ccs?autoReconnect=true" /> ...
c3p0 重新自动连接 c3p0 重新自动连接 c3p0 重新自动连接 &autoReconnect=true
true&characterEncoding\=UTF-8&autoReconnect\=true 4、重启Tomcat。 后台路径:http://域名/admin 后台用户名:admin 密码:admin 后台功能:系统设置、管理员列表、文章栏目、文章管理、产品管理、留言管理
useUnicode=true&characterEncoding=utf8&autoReconnect=true"; ``` 除了SQL Server,JDBC还支持其他数据库系统,如MySQL、Oracle、PostgreSQL等。每个数据库都有其特定的驱动和连接参数。例如,对于MySQL,我们...
useUnicode=true&characterEncoding=GB2312&autoReconnect=true jdbc.username.mysql=root jdbc.password.mysql=root 3、 Web容器:tomcat6.x 4、 页面访问路径: 论坛首页: http://localhost:8080/bbs 后台管理...
要解决连接超时问题,我们可以在连接 URL 上添加 autoReconnect=true 来解决。例如: jdbc:mysql://localhost:3306/test?autoReconnect=true 然而,需要注意的是,MySQL 不推荐使用 autoReconnect 配置,因为如果...
autoReconnect=true&characterEncoging=utf8&zeroDateTimeBehavior=convertToNull 3. 完整的配置参数参考intouch2.war!\WEB-INF\config\config.xml 4. 配置文件config.xml中的mail.upflow.com换成实际的...
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&...