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

hibernate链接mysql数据库异常处理

阅读更多
转[http://www.cnblogs.com/safeking/archive/2007/02/01/637084.html]

运行环境:tomcat +mysql
项目用到了 hibernate3.0   c3po  mysql的数据层组合,开发部署非常顺利,但每天早上访问应用都抛出 Could not open Hibernate session for transaction 异常,Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception,但经过几次访问后又恢复正常
原来是Mysql在经过8小时不使用后会自动关闭已打开的连接,摘录原文如下:

5.4.

I have a servlet/application that works fine for a day, and then stops working overnight
	

MySQL closes connections after 8 hours of inactivity. You either need to use a connection pool that handles stale connections or use the "autoReconnect" parameter (see "Developing Applications with MySQL Connector/J").

Also, you should be catching SQLExceptions in your application and dealing with them, rather than propagating them all the way until your application exits, this is just good programming practice. MySQL Connector/J will set the SQLState (see java.sql.SQLException.getSQLState() in your APIDOCS) to "08S01" when it encounters network-connectivity issues during the processing of a query. Your application code should then attempt to re-connect to MySQL at this point.


通过以上信息的收集隐隐知道了问题所在(mysql经过28800秒也就是8个小时后关掉空闲链接,而c3p0是经过6000000妙才断开链接,就有可能出现c3po保持的连接有可能已经被mysql关掉了,自然就出现了hibernate不能打开session,并且都是第二天一早就出错);为了验证我的想法,决定在开发机上重现这个错误;首先在mysql配置文件my.ini 加上 wait_timeout=30  让mysql经过30妙就关掉链接,重启应用,第一次访问成功,等待一分钟后访问果然出现同样的错误,说明问题诊断正确,着手修改配置如下:
<property name="maxIdleTime">
   <value>28000</value>
  </property> 
  <property name="idleConnectionTestPeriod">
   <value>28000</value>
  </property> 


配置解释:28000<28800 使c3p0 在mysql关不连接之前关闭自己持有的链接,配置idleConnectionTestPeriod 参数使c3po每隔28000检查已有的连接是否可用,这样应该确保拿到的连接都是可用的,如果还不放心可以加上 testConnectionOnCheckout参数每当拿出连接的时候就检查一下是否可以,这个可能会使mysql有一定的性能牺牲;
  <property name="testConnectionOnCheckout">
   <value>true</value>
  </property>
分享到:
评论

相关推荐

    202309-MySQL数据库面试题(2023最新版)思维导图.zip

    - 异常处理 - 多线程编程 2. 数据库: - 熟悉SQL语言 - 了解关系型数据库和非关系型数据库 - 数据库连接池 - 数据库事务 3. Spring框架: - Spring Boot - Spring MVC - Spring Data - Spring ...

    Hibernate实践例子程序

    由于Hibernate是基于 JDBC的,所以它的数据库查寻的能力相对于CMP来说也是异常强大的,Hibernate自身也提供了HQL查寻语句。 一个最简单的Hibernate project(不涉及Struts, Tomcat, XDoclet,JBoss等东东)必须的...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  20.8 小结  20.9 思考题 第21章 处理并发问题  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  20.8 小结  20.9 思考题 第21章 处理并发问题  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  20.8 小结  20.9 思考题 第21章 处理并发问题  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  20.8 小结  20.9 思考题 第21章 处理并发问题  ...

    bitronix 连接 MySQL 出现MySQLSyntaxErrorException 的解决方法

    bitronix 连接 MySQL 出现MySQLSyntaxErrorException 的解决方法 1. 开发环境 hibernate 版本:5.1.0.Final Bitronix btm 版本:2.1.3 2 异常堆栈信息 Caused by: ...

    SOY Framework框架Java RCP编程(一)--配置开发环境

    打开server项目下的hibernate.properties 文件,修改Hibernate数据库方言的配置(hibernate.dialect)为项目选用的数据库类型,如果采用是mysql 5.0数据库,设置为org.hibernate.dialect.MySQLDialect, 如果采用oracle...

    web项目常用jar包及说明.zip

    如果用BasicDataSource来配置数据库连接,还要加入2个包: 7.commons-pool.jar 8.commons-dbcp.jar Hibernate需要的jar包: 1.hibernate3.jar(hibernate的核心jar包) 2.antlr-2.7.2.jar(语言转换工具,hibernate...

    学生成绩信息管理系统论文 JSP 完整版

    13)客户端可以通过TCP/IP、Unix套接字、命名管道(NT)连接到MySQL数据库服务器;对多种字符集的完全支持等等许多优点。MySQL有如此多的特点,又由于其免费的特点,这就给许多的中小应用提供了不错的选择。尤其是对...

    java开发工程师面试中被经常问到知识点大全

    java开发工程师面试中被经常问到知识点大全,pdf文档,本文分为十九个模块,分别是∶ ...数据库链接框架:Hibernate、MyBatis 消息队列:RabbitMQ、Kafka、Zookeeper 数据存储相关:MySQL、Redis 内存调优:JVM

    火炬博客系统7

    &lt;br&gt; MYSQL安装 将安装包解压缩,运行tdbmysql.bat,然后用torchblogdb-setup.sql建表, 将数据导入 MYSQL数据库。 将torchblog目录COPY至Tomcat/webapps/下,即Tomcat/webapps/torchblog 修改Tomcat...

    火炬博客系统6

    &lt;br&gt; MYSQL安装 将安装包解压缩,运行tdbmysql.bat,然后用torchblogdb-setup.sql建表, 将数据导入 MYSQL数据库。 将torchblog目录COPY至Tomcat/webapps/下,即Tomcat/webapps/torchblog 修改Tomcat...

    火炬博客系统5

    &lt;br&gt; MYSQL安装 将安装包解压缩,运行tdbmysql.bat,然后用torchblogdb-setup.sql建表, 将数据导入 MYSQL数据库。 将torchblog目录COPY至Tomcat/webapps/下,即Tomcat/webapps/torchblog 修改Tomcat...

    低清版 大型门户网站是这样炼成的.pdf

    2.1.9 struts 2的异常处理 52 2.2 struts 2配置精要 54 2.2.1 web.xml中struts 2的配置实现 54 2.2.2 struts 2属性配置文件struts.properties详解 55 2.2.3 struts 2核心配置文件struts.xml详解 57 2.3 struts ...

    SSH 项目 整合jar包

    如果用BasicDataSource来配置数据库连接,还要加入2个包: 7.commons-pool.jar 8.commons-dbcp.jar 三、Hibernate需要的jar包: 1.hibernate3.jar(hibernate的核心jar包) 2.antlr-2.7.2.jar(语言转换工具,...

    SSH 框架所需JAR包

    如果用BasicDataSource来配置数据库连接,还要加入2个包: 7.commons-pool.jar 8.commons-dbcp.jar Hibernate需要的jar包: 1.hibernate3.jar(hibernate的核心jar包) 2.antlr-2.7.2.jar(语言转换工具,hibernate...

    Java常见面试题208道.docx

    Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。...

    涵盖了90%以上的面试题

    Java中的异常处理机制的简单原理和应用。 java socket java序列化 JVM加载class文件的原理 双亲委派模型 为什么要自定义类加载器 如何自定义类加载器 什么是GC 内存泄漏和内存溢出 Java的内存模型(JVM的内存划分) ...

Global site tag (gtag.js) - Google Analytics