`
yonglelaoren
  • 浏览: 2408 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

spring+hibernate+c3p0整合链接池配置-连接无法释放问题(已经解决)

阅读更多
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xsi:schemaLocation="
 http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-3.2.xsd
 http://www.springframework.org/schema/tx
 http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
 http://www.springframework.org/schema/aop
 http://www.springframework.org/schema/aop/spring-aop-3.2.xsd"
 default-autowire="byName">
 <context:property-placeholder location="classpath:jdbcConfig.properties" />
 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
  destroy-method="close">
  <property name="driverClass" value="${jdbc.driverClassName}" />
  <property name="jdbcUrl" value="${jdbc.url}" />
  <property name="user" value="${jdbc.username}" />
  <property name="password" value="${jdbc.password}" />
  <property name="minPoolSize" value="5" />
  <property name="maxPoolSize" value="20" />
  <property name="maxStatements" value="10" />
  <property name="idleConnectionTestPeriod" value="3000" />
  <property name="loginTimeout" value="300" />
 </bean>
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <property name="dataSource">
   <ref local="dataSource" />
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
    <prop key="hibernate.format_sql">true</prop>
    <prop key="hibernate.use_sql_comments">true</prop>
   </props>
  </property>
  <property name="packagesToScan" value="com" />
 </bean>
 <context:component-scan base-package="com" />
 <!-- 事务管理器 -->
 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
  <property name="dataSource">
   <ref local="dataSource" />
  </property>
 </bean>
 <!-- 支持事务 @Transactional 标记 -->
 <tx:annotation-driven transaction-manager="transactionManager" />
</beans>


以上配置是spring+hibernate+c3p0整合链接池配置,通过代码全注解的方式增加事物管理,连接池等

前不久一直被一个问题困扰着,
getHibernateTemplate().getSessionFactory().openSession();
通过这种方式打开的session不会自动关闭,现象时查询多次之后连接池满了,不会再继续查询了
日志信息如下
2014-06-06 15:16:50,654 [btpool0-4] DEBUG AbstractBeanFactory : Returning cached instance of singleton bean 'transactionManager'
2014-06-06 15:16:50,655 [btpool0-4] DEBUG AbstractPlatformTransactionManager : Creating new transaction with name [com.*.*.service.ActivityService.findAllByPage]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''
2014-06-06 15:16:50,655 [btpool0-4] DEBUG HibernateTransactionManager : Opened new Session [org.hibernate.impl.SessionImpl@4bdc0bc7] for Hibernate transaction
2014-06-06 15:16:50,655 [btpool0-4] DEBUG HibernateTransactionManager : Preparing JDBC Connection of Hibernate Session [org.hibernate.impl.SessionImpl@4bdc0bc7]
2014-06-06 15:16:50,655 [btpool0-4] DEBUG BasicResourcePool : trace com.mchange.v2.resourcepool.BasicResourcePool@7bfbfeae [managed: 20, unused: 0, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@564389b7)
2014-06-06 15:16:50,656 [btpool0-4] DEBUG HibernateTransactionManager : Exposing Hibernate transaction as JDBC transaction [com.mchange.v2.c3p0.impl.NewProxyConnection@6a02938d]
2014-06-06 15:16:50,657 [btpool0-4] DEBUG BasicResourcePool : acquire test -- pool is already maxed out. [managed: 20; max: 20]
2014-06-06 15:16:50,657 [btpool0-4] DEBUG BasicResourcePool : awaitAvailable(): com.mchange.v2.c3p0.impl.NewPooledConnection@564389b7
2014-06-06 15:16:50,658 [btpool0-4] DEBUG BasicResourcePool : trace com.mchange.v2.resourcepool.BasicResourcePool@7bfbfeae [managed: 20, unused: 0, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@564389b7)



后来通过网上查找资料看到这么一篇内容
http://blog.csdn.net/a549324766/article/details/7332818
这个是hibernate与spring整合开发,让DAO继承了spring的HibernateDaoSupport,这样的确能够提高开发效率 ,但是不够灵活,而且使DAO层依赖于spring的api,增加了耦合。但是不考虑复用的话还可以。
    下面一个一个的分析: this.getsession实际上是调用了父类中的方法获得session。使用spring管理hibernate的SessionFactory的时候,这个方法会从session池中拿出一session.这样做有可能有问题,就是超session池连接数的时候,spring无法自动的关闭session。 不推荐使用
     this.getHibernateTemplate().getSessionFactory().getCurrentSession()从spring管理的sessionFactory中创建一个绑定线程的session.spring会根据该线程的执行情况来自动判断是关闭session还是延迟关闭。这样做可以避免手动的管理实务,同时一个线程最多开启和关闭一次session又可以提高程序的性能。 极力推荐使用这种方法
     this.getHibernateTemplate().getSessionFactory().OpenSession。这种方法从spring管理的sessionFactory中创建一个session,此session不是线程绑定的。当执行完一个实务的时候自动关闭session.这种方法不用手动管理实务,但是同一个线程多次的开启和关闭session,浪费系统资源和影响执行效率,正常情况下还是不要用了。

其中this.getSession这个方法我也用过,这个确实也会将连接关闭,当时对于楼主提到的问题不知道怎么测试,
第二个问题完美的解决了,我遇到的连接池无法关闭的问题而且楼主也推荐使用,应该找到最终的解决办法了
第三个,就是我前面一直用的,需要手动关闭连接

对于网上还有一种说法,
http://bbs.csdn.net/topics/340092096
问题已经解决,原来在配置hibernater时少配了一个属性:
<prop key="hibernate.connection.release_mode">after_statement</prop>
唉!不懂是此属性值默认是on_close,就是session.close();时关闭连接,但我在调用这查询时,使用手动session.close();还是一样的结果。。。。

该配置对于我来说一点用都没有,不知道是什么场景下使用

不过总算搞定连接池问题了,已经工作的时候,也经常听别人说你们要用getCurrentSession,而不要新开连接,新开的需要自己手动关闭,大概道理就是这个了
分享到:
评论

相关推荐

    struts+spring+hibernate基础整合包+数据库Mysql+C3p0

    数据库的链接包是MySQl数据库,链接使用的C3P0 SSH是 struts+spring+hibernate的一个集成框架,是目前比较流行的一种Web应用程序开源框架 现在的结构是,Struts负责显示层,Hibernate负责持久层,Spring负责中间的...

    SSH整合学习笔记之struts2+spring+hibernate+c3p0源码

    SSH整合是Java Web开发中的一个经典组合,由Struts2、Spring和Hibernate三大框架组成,再加上C3P0作为数据库连接池,形成了高效且灵活的应用架构。本学习笔记将深入探讨这四个组件如何协同工作,构建出强大的企业级...

    ssh框架整合详细步骤(spring+struts2+hibernate)

    - 添加Hibernate的核心类库到项目中,包括hibernate-core、slf4j-api、slf4j-log4j12、c3p0等。 **Step12:配置Hibernate** - 创建Hibernate的配置文件hibernate.cfg.xml,配置数据库连接信息、方言、缓存策略等。 ...

    Struts+Spring+Hibernate 整合教程.pdf

    - 配置数据源是整合的关键一步,Spring支持多种数据源配置方式,包括但不限于C3P0、DBCP等。 - 数据源配置通常通过XML配置文件完成,需要指定数据源的类型、数据库连接参数等。 **2.2.3 SessionFactory配置** - ...

    sturts2+spring2.5+hibernate3.5+c3p0+log4j整合示例项目

    在这个项目中,c3p0被集成到Spring配置中,为Hibernate提供连接池服务,确保多个并发请求时能高效地获取和释放数据库连接。 ### Log4j日志系统 Log4j是Apache的一个开源项目,用于记录程序运行时的日志信息。它...

    SSH - Struts2 + Spring4 + Hibernate4 + c3p0 + Mysql.rar

    c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,提供数据库连接的自动创建、释放等功能,提高了数据库连接的使用效率。在SSH项目中,c3p0被用来管理和优化数据库连接,确保在高并发环境下仍能高效地处理...

    spring4+hibernate+springmvc+c3p0

    标题 "spring4+hibernate+springmvc+c3p0" 涉及的是一个经典的Java后端开发架构,主要用于构建高效、稳定的Web应用程序。这个架构由四个主要组件构成: 1. **Spring 4**:这是一个全面的企业级应用开发框架,提供...

    Spring+SpringMVC +Hibernate 整合

    5. 数据源配置:在Spring配置文件中,配置DataSource,可以使用DBCP、C3P0等连接池,或者使用JNDI查找数据源。 6. 事务管理:Spring 提供了声明式事务管理,可以在配置文件中声明事务边界,由Spring自动管理事务的...

    spring4.1.6+hibernate4.3.9+struts2.3.20整合

    整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.20 + Spring4.1.6 + Hibernate4.3.9。 此外,还有:log4j、slf4j、junit4、ehcache等知识点。 项目...

    Struts2+Spring2.5+Hibernate3.3整合开发之Sring与Hibernate整合

    一、整合开发时Hibernate、Spring需要的JAR文件。 hibernate核心安装包下的(下载路径:http://www.hibernate.org/,点击“Hibernate Core”右边的“Downloads”): hibernate3.jar lib\bycode\cglib\hibernate-...

    struts1+spring+hibernate所需jar包

    4. **其他依赖**: 整合这三个框架时,还需要一些共用的库,如`commons-logging.jar`(日志接口)、`log4j.jar`(日志实现)、`commons-dbcp.jar`或`c3p0.jar`(数据库连接池)、`jta.jar`(Java Transaction API)等...

    spring3+hibernate4+springmvc+druid连接池

    Druid作为一款高性能、功能丰富的数据库连接池,相比其他如C3P0、DBCP等,具有更好的监控和扩展性,但相关的整合教程或示例可能相对较少,因此这个项目为开发者提供了一个实践和学习的平台。 【知识点】: 1. **...

    spring +struts2+hibernate3整合的jar包集合

    这个"spring + struts2 + hibernate3整合的jar包集合"提供了这三个框架的核心库,以及c3p0和DBCP数据库连接池的依赖,使得开发者可以快速搭建一个完整的MVC架构应用。 Spring框架是一个全面的后端解决方案,它提供...

    ssh框架整合jar包(struts2+spring4+hibernate4)

    - 整合:在SSH框架中,C3P0作为数据源,为Hibernate提供连接,通过配置文件设定连接池参数。 整合SSH框架涉及的关键步骤: - 引入所有必要的jar包,包括Struts2、Spring4、Hibernate4和C3P0的依赖。 - 配置Struts2...

    Spring+Hibernate+Jpa+Struts2整合实例

    `c3p0-0.9.1.2.jar`和` cglib-nodep-2.1_3.jar`分别是数据库连接池和代码生成库,提升性能和数据库资源管理。 6. **配置与整合**:整合这些框架通常涉及编写XML配置文件(如Spring的`beans.xml`,Struts2的`struts....

    SpringMVC+Spring+Hibernate(SSH)框架搭建之一

    3. 数据源配置:配置数据库连接池,如C3P0或HikariCP,以及JDBC数据源。 4. 事务管理:启用Spring的声明式事务管理,通过@Transactional注解控制事务边界。 5. AOP配置:如果需要,可以配置AOP规则,如定义切面、...

    Spring +struts+c3p0 框架demo

    【Spring + Struts + C3P0 框架整合详解】 在软件开发领域,Spring、Struts 和 C3P0 是三个非常重要的开源框架,它们分别负责不同的职责,共同构建了一个高效、稳定的Web应用程序。Spring 作为核心的依赖注入(DI)...

    struts22.3.4.1+hibernate4.1.6+spring3.1.2整合jar包

    "连接池"可能是Apache Commons DBCP或C3P0,这些是管理数据库连接的组件,可以提高应用程序的性能和资源利用率。"poi"则指的是Apache POI项目,它允许Java程序读写Microsoft Office格式的文件,如Excel,这对于数据...

    struts2.3.24+spring4.2+hibernate5.0整合jar

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,提供了管理数据库连接的功能。在SSH整合中,C3P0可以高效地管理数据库连接,避免资源浪费,提高系统性能。 Oracle驱动是连接Oracle数据库的关键组件,它...

    Struts+Spring+Hibernate 整合教程

    - **3.2 配置数据源**:Spring 支持多种数据源配置方式,包括JNDI、C3P0、DBCP等。 - **步骤**: 1. 在Spring配置文件中定义数据源。 2. 配置连接池参数。 - **3.3 配置SessionFactory**:SessionFactory 是 ...

Global site tag (gtag.js) - Google Analytics