`
小小白
  • 浏览: 36027 次
  • 性别: 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>
分享到:
评论

相关推荐

    SpringBoot+hibernate+mysql+sqlserver双数据源

    4. 异常处理:由于两个数据库可能存在差异,如SQL语法、数据类型等,因此需要处理可能出现的异常,确保系统的健壮性。 5. 测试与监控:为了确保双数据源的正确性和性能,需要进行充分的单元测试和集成测试,同时...

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

    这些参数可以根据实际需求调整,以确保在数据库异常时,系统能够快速恢复。 此外,我们还可以通过监控`Proxool`的统计信息来优化连接池的性能。例如,设置`hibernate.proxool.statistics`为`true`,可以开启统计...

    struts2连接mysql数据库登录验证程序

    在这个“struts2连接mysql数据库登录验证程序”中,我们主要探讨以下几个关键知识点: 1. **Struts2框架**:Struts2作为MVC设计模式的实现,负责处理HTTP请求,通过Action类将用户请求映射到业务逻辑,并将结果传递...

    Struts2 + Hibernate + mysql

    Struts2的核心功能包括动作调度、结果渲染、异常处理和国际化支持等。它通过拦截器机制实现了业务逻辑与视图的分离,增强了代码的可维护性和可测试性。Struts2还支持多种模板技术,如FreeMarker和JSP,以及插件扩展...

    idea连接mysql数据库.docx

    ### 使用IntelliJ IDEA连接MySQL数据库的详细指南 在软件开发过程中,经常需要与数据库进行交互,而IntelliJ IDEA作为一款强大的Java集成开发环境,提供了便捷的方式帮助开发者完成这一任务。本文将详细介绍如何在...

    SpringMVC+Hibernate +MySql+ EasyUI实现CRUD

    在IT行业中,构建Web应用程序是常见的任务,而SpringMVC、Hibernate...在实际项目中,还需要考虑异常处理、安全性、性能优化等更多细节。通过不断实践和学习,开发者可以更好地掌握这些技术,提升开发效率和应用质量。

    java连接mysql数据库实现简单的学生成绩管理

    在Java编程语言中,连接MySQL数据库是开发许多应用程序的基础,特别是涉及到数据存储和检索的系统。本教程将介绍如何使用Java实现一个简单的学生成绩管理系统,该系统完全基于控制台输出,适合Java初学者进行基础...

    java连接Mysql数据库

    Java连接MySQL数据库是Java...总之,Java连接MySQL数据库涉及的知识点包括JDBC接口、数据库连接、SQL语句执行、结果集处理、连接池以及异常处理。理解并熟练运用这些概念,可以让你在Java数据库开发中更加得心应手。

    mysql数据库表映射实体生成

    9. **异常处理**:在处理过程中,工具类应能捕获并处理可能出现的异常,如数据库连接失败、SQL执行错误等。 10. **持续更新与社区贡献**:描述中提到的“有缺陷的地方大家一起补充”,意味着这个工具类鼓励社区参与...

    mysql 数据库备份 java 源代码

    在这个场景中,我们关注的是使用Java来实现MySQL数据库的备份,结合Hibernate这个流行的对象关系映射(ORM)框架来获取数据库配置信息。 首先,我们需要理解Hibernate在其中的角色。Hibernate是一个Java库,它允许...

    MySql连接数据库(方法、代码、用到的所有组件)

    连接MySQL数据库是进行数据操作的第一步,这通常涉及到使用特定的API或工具。以下是对MySQL连接数据库涉及的知识点的详细说明: 1. **连接方式**: - **命令行客户端**:这是最基础的连接方式,通过MySQL的命令行...

    java连接mysql数据库(JDBC驱动)

    Java连接MySQL数据库主要依赖于Java Database Connectivity (JDBC) API,这是一个Java编程接口,允许Java应用程序与各种数据库进行交互。本教程将详细讲解如何通过JDBC驱动程序建立Java与MySQL数据库之间的连接。 ...

    hibernate根据字段生成数据库表

    - **数据库**:选择一个支持的数据库(例如 MySQL)并配置好连接信息。 2. **配置文件**: - **hibernate.cfg.xml**:配置 Hibernate 连接数据库的基本信息,包括数据库驱动、用户名、密码等。 - **实体类**:...

    Myeclipse(struts2实现增删改查)+mysql数据库

    9. **异常处理**:在Struts2中,可以通过全局异常拦截器来统一处理可能出现的运行时异常,提供友好的错误提示。 10. **安全性**:尽管这是一个基础示例,但在实际应用中,应考虑安全性问题,如SQL注入、XSS攻击等,...

    Spring mvc+hibernate+mysql Demo

    Hibernate会通过这些信息建立到MySQL数据库的连接,并进行SQL语句的生成和执行。 在这个"Spring mvc+hibernate+mysql Demo"项目中,可能包含了一个简单的示例应用,展示了如何配置和使用这三个技术。"test"文件可能...

    hibernate连接数据[Mysql]的代码实例

    以上就是使用Hibernate连接MySQL数据库的基本步骤和操作示例。注意,实际应用中还需要考虑事务管理、异常处理、性能优化等方面。在`hibernate_mysql`这个压缩包中,可能包含了这些示例的源代码,你可以下载并运行来...

    基于Struts2+Spring+Hibernate+MySql的注册登录系统

    Struts2的核心概念包括拦截器(Interceptor)、动作(Action)、结果(Result)等,提供了强大的表单验证、国际化、异常处理等功能。 其次,Spring框架是一个全面的后端解决方案,它包含依赖注入(Dependency ...

    购物网站源码 Java+mysql数据库源代码

    还需要在数据库中创建对应的数据表,并根据描述中的提示修改数据库连接配置,确保程序能够正确连接到本地的MySQL数据库。 综上所述,这个项目涵盖了Java Web开发的多个关键知识点,对开发者的要求不仅限于编程技能...

    mysql数据库的访问

    7. **异常处理**:为了保证程序的健壮性,我们需要捕获并处理可能出现的数据库异常,如`SQLException`。 8. **事务管理**:对于涉及多条数据库操作的业务,如用户注册,需要使用事务确保数据的一致性。Struts2可以...

    java使用hibernate操作数据库jar

    在实际开发中,我们首先需要在hibernate.cfg.xml中配置数据库连接信息,然后创建实体类,并通过注解@Entity、@Table等定义与数据库表的映射关系。接着,编写DAO层,利用SessionFactory和Session进行数据库操作,例如...

Global site tag (gtag.js) - Google Analytics