`
giga_Zhang
  • 浏览: 155250 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate用Mysql数据库时链接关闭异常的解决

阅读更多


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.

为 此试验三种方法:
1、在数据库的url中加入autoReconnect=true;
2、在每次调用getSession()方法时判断 session.isClosed()是否为真,若为真则调用session.reconnect();
3、不使用Hibernate内置的连接池(Hibernate强烈推荐不使用但我以前一直在用),改用C3P0连接池,这个连接池会自动 处理数据库连接被关闭的情况。要使用C3P0很简单,先从Hibernate里把c3p0-0.8.3.jar复制到项目的lib目录中,再在 hibernate.properties里去掉hibernate.c3p0开头的那些属性的注释(使用缺省值或自己需要的数值),这样 Hibernate就会自动使用C3P0代替内置的连接池了。到目前为止前面的问题没有再出现过。

以前对Hibernate警告不要使用内置连接池作产品用途没有太放在心上,其实不论从稳定还是性能的考虑,都应该选择相对更加成熟的连接池。

C3P0的具体配置方方法, 其他连接池(如DBCP等)大同小异。一下配置主要只针对连接池部分。
1.1 hibernate.properties中的配置
hibernate.show_sql = true 
hibernate.dialect = net.sf.hibernate.dialect.MySQLDialect 
hibernate.connection.driver_class = com.mysql.jdbc.Driver 
hibernate.connection.url = jdbc:mysql://localhost/HibernateTest 
hibernate.connection.username = root 
hibernate.connection.password = 
hibernate.c3p0.min_size=5 
hibernate.c3p0.max_size=20 
hibernate.c3p0.timeout=1800 
hibernate.c3p0.max_statements=50

1.2在hibernate.cfg.xml中直接配置C3P0连接池
<property name="c3p0.min_size">5</property><!--连接池的最小连接数-->
    <property name="c3p0.max_size">20</property><!--最大连接数-->
    <property name="c3p0.timeout">100</property><!--连接超时时间-->
    <!每隔100秒检测连接是否可正常使用 -->
     <property name="c3p0.idle_test_period">100</property>
    <!--当池中的连接耗尽的时候,一次性增加的连接数量,默认为3-->
<property name="hibernate.c3p0.acquire_increment">3</property>
<!--statemnets缓存大小-->
<property name="c3p0.max_statements">150</property>

2.在Spring配置文件中配置C3P0连接池

<!--数据源配置 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<!--驱动类-->
<property name="driverClassName">
<value> oracle.jdbc.driver.OracleDriver</value>
</property>
<!--连接字符串-->
<property name="url">
    <value> jdbc:oracle:thin:@210.51.173.22:1521:orcl</value>
</property>
</bean>

<!--数据库属性配置 -->

<bean id="hibernateProperties"   class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="properties">
   <props>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
    <prop key="hibernate.dialect"> org.hibernate.dialect.Oracle9Dialect </prop>
    <prop key="hibernate.query.substitutions">true 'T', false 'F'</prop>
    <prop key="hibernate.show_sql">false</prop>
    <prop key="hibernate.c3p0.minPoolSize">5</prop>
    <prop key="hibernate.c3p0.maxPoolSize">20</prop>
    <prop key="hibernate.c3p0.timeout">600</prop>
    <prop key="hibernate.c3p0.max_statement">50</prop>
</property>
</bean>

<!--配置Hibernate的SessionFactory-->
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource">
      <ref local="dataSource"/>
</property>
<property name="hibernateProperties">
      <ref bean="hibernateProperties" />
</property>
<!--   添加po映射文件 -->
<property name="mappingResources">
     <list>
        <value>Customer.hbm.xml</value>
        <value>Account.hbm.xml</value>
     </list>
</property>
</bean>
分享到:
评论

相关推荐

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

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

    java与mysql数据库的连接

    对于文档`Java.doc`和`Java.ppt`,它们可能包含了更深入的Java编程和MySQL数据库管理的知识,比如Java多线程、异常处理、MySQL索引优化、事务处理等内容。如果需要深入了解,建议查看这些文档以获取详细信息。 总的...

    idea连接mysql数据库.docx

    - **资源管理**:在使用JDBC或其他数据库连接技术时,务必妥善处理资源(如`Connection`、`Statement`、`ResultSet`)的关闭和异常处理,避免资源泄露和程序异常。 通过上述步骤,您可以顺利地在IntelliJ IDEA中...

    java使用hibernate操作数据库jar

    7. 关闭Session和SessionFactory:操作结束后,关闭Session以释放资源,SessionFactory在不再使用时关闭。 四、Hibernate jar包 在“hibernate的jar包”中,通常包括以下组件: 1. hibernate-core.jar:Hibernate的...

    MySQL+Hibernate下连接空闲8小时自动断开问题解决方案.docx

    MySQL+Hibernate 连接空闲8小时自动断开问题解决方案 知识点1: Hibernate 的连接池机制 在 Hibernate 中,默认情况下 使用的是 DriverManagerConnectionProvider,这是一个简单的连接池机制。它将打开的连接缓存在...

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

    在实际项目中,可能还需要处理异常,比如`SQLException`,以及考虑数据库连接池的使用,以提高应用性能。此外,根据描述,所有操作都在控制台进行,没有图形用户界面。对于更复杂的系统,可以考虑使用Swing或JavaFX...

    java连接Mysql数据库

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

    MySql练习1:使用纯Java方式连接数据库.zip

    在本实践项目中,我们将探讨如何使用纯Java代码来连接MySQL数据库。这是一项基础但至关重要的技能,对于任何想要在Java应用程序中与数据库交互的开发者来说都是必要的。MySQL是一个广泛使用的开源关系型数据库管理...

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

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

    JDBC操作步骤以及MySQL数据库连接操作.pdf

    JDBC连接MySQL数据库通常涉及以下几个核心步骤: 1. **加载数据库驱动**:首先,需要在项目环境中引入对应数据库的JDBC驱动包。对于MySQL,这通常是`mysql-connector-java`的JAR文件。将其添加到项目的类路径...

    几种数据库的连接方法源码+文档

    数据库连接是IT行业中一个至关重要的概念,特别是在开发与数据交互的应用程序时。本文将深入探讨几种常见的数据库连接方法,包括源码示例和相关文档,旨在帮助开发者更好地理解和实现数据库的连接。 首先,我们来看...

    演示使用java和mysql桥接方式操作数据库

    7. **关闭资源**: 示例中没有显示关闭数据库连接和Statement对象的部分,但在实际应用中,我们需要在完成数据库操作后,调用`close()`方法释放这些资源,防止内存泄漏。例如,`connect.close()`和`stmt.close()`。 ...

    oracle Mysql sqlserver 数据库连接jar

    另外,合理使用连接池(如C3P0、HikariCP)可以显著提升应用性能,避免频繁地打开和关闭数据库连接。 7. **安全注意事项**:避免在代码中硬编码数据库凭证,可以使用环境变量或配置文件来存储敏感信息。使用最新的...

    数据库连接池c3p0jar包

    C3P0的主要目标是提高数据库连接的效率和稳定性,通过复用已建立的数据库连接,避免频繁地创建和关闭连接,从而降低系统开销。C3P0支持多种数据库,包括MySQL、Oracle、PostgreSQL等,并且与Hibernate、Spring等框架...

    用java链接Mysql数据库的飞机订票系统课程设计

    - **Connection Pool**:为了提高性能,项目通常使用连接池管理数据库连接,如C3P0或HikariCP,它们可以有效地复用数据库连接,避免频繁创建和关闭连接。 4. **实体类和对象映射**: - **ORM(Object-Relational ...

    mysql 数据库封装类

    - **连接超时与重试策略**:确保在网络不稳定时,数据库连接能够正常恢复。 7. **性能优化**: - **缓存机制**:可以实现查询结果缓存,减少对数据库的访问。 - **读写分离**:支持主从复制环境下的读写分离,...

    mysql数据库驱动

    MySQL数据库驱动是连接Java应用程序与MySQL数据库的关键组件。在Java中,这个驱动通常指的是JDBC(Java Database Connectivity)驱动,它允许Java代码通过标准接口与MySQL数据库进行交互。以下是关于MySQL数据库驱动...

    mysql数据库java操作

    - 为了提高性能和资源利用率,使用连接池(如C3P0、HikariCP、Apache DBCP等)管理数据库连接。 - 配置连接池的初始化大小、最大连接数、超时时间等参数。 9. **DAO(Data Access Object)设计模式** - DAO模式...

    HibernateADD (hibernate和spring整合,使用dbcp连接池方式连接数据库)

    在IT行业中,数据库连接管理是应用系统开发中的关键环节,特别是在使用Java进行企业级开发时。本主题将深入探讨如何整合Hibernate ORM框架与Spring框架,并利用Apache DBCP(BasicDataSource)连接池来高效地管理...

    java连接MySQl数据库实例代码

    总结起来,这个Java连接MySQL数据库的实例代码展示了如何使用JDBC API进行基本的数据库连接操作。了解这些基础,你可以构建更复杂的数据库操作,包括查询、插入、更新和删除数据等。同时,还要熟悉SQL语言,以便编写...

Global site tag (gtag.js) - Google Analytics