0 0

连接池泄露的问题5

昨天发的帖子可能描述的不是很清楚,今天整理了再发一次,求大师们帮忙看看,两个帖子一起结!
1,应用一datasource配置
<bean id="ds"  class="org.apache.commons.dbcp.BasicDataSource"> 
          <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> 
          <property name="url" value="jdbc:oracle:thin:@192.168.249.50:1521:orcl"/> 
          <property name="username" value="skxt"/> 
           <property name="password" value="skxt"/> 
          
      </bean>                  

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="ds" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.dialect">com.eka.util.MyDialect</prop>
<prop key="hibernate.c3p0.min_size">10</prop>
<prop key="hibernate.c3p0.max_size">50</prop>
<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
<prop key="hibernate.c3p0.timeout">1000</prop>
<!-- 最大的PreparedStatement的数量 -->
<prop key="hibernate.c3p0.max_statements">100</prop>
<!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
<prop key="hibernate.c3p0.acquire_increment">2</prop>
<!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒-->
<prop key="hibernate.c3p0.idle_test_period">120</prop>
<!-- 每次都验证连接是否可用 -->
<prop key="hibernate.c3p0.validate">false</prop>
</props>
</property>
</bean>
2,应用一webservice调用
public class FinanceClient {

public String serviceClient(String methodName,String xml){
try {
Configuration objConfiguration=new Configuration();
String Url=objConfiguration.getValue("finance_url");
String Qname=objConfiguration.getValue("finance_qname");


   Service service = new Service();
   Call call = (Call) service.createCall();
  
   // 设置调用服务地址
   call.setTargetEndpointAddress(new java.net.URL(Url));
  
   //此处一定要配置wsdl的namespace参数 找wsdl中 wsdl:definitions标签下的targetNamespace   http://webservice.myself.gzticket.gmcc.com
   call.setOperationName(new QName(Qname, methodName));
   //此处需要配置传入参数类型与参数名称,如果未设置jax-ws则无法接受参数,会认为传入的参数为null
   call.addParameter("linkNo",org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
   //如果设置类传入参数类型,此处也需要设置返回参数类型
   call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
   call.setUseSOAPAction(true);
   call.setSOAPActionURI(Url);
   String result = (String) call.invoke(new Object[] { xml });      
   return result;

} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}
}

}
调用:new FinanceClient().serviceClient(xml);
3,应用二 datasource配置:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url"
value="jdbc:oracle:thin:@192.168.249.50:1521:orcl">
</property>
<property name="username" value="netpay_0407" />
<property name="password" value="netpay_0407" /> 
</bean>

4,应用二 webserivice配置

<!-- xfire相关配置 -->
    <bean id="webAnnotations" class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations" lazy-init="false" />
<bean id="jsr181HandlerMapping" class="org.codehaus.xfire.spring.remoting.Jsr181HandlerMapping" lazy-init="false">
<property name="xfire" ref="xfire" />
<property name="webAnnotations" ref="webAnnotations" />
</bean>
   <!-- end xfire -->

@Component
@WebService(serviceName = "financeService", endpointInterface = "com.elis.finance.webService.IFinanceManager")
public class FinanceManager implements IFinanceManager {

@Autowired
private PropJournalServiceImpl propJournalServiceImpl;

@Autowired
private BisJournalFileDirectProcess bisJournalFileDirectProcess;

public String uploadVoucherToBis(String xml) {
   //调用应用二的数据库
    mapper.proCreateSumVoucher();
}
}

应用二的mapper调用:
@Repository
public class PropJournalMapper {
@Autowired
private SqlSessionTemplate sessionTemplate;

public List<PropJournalDTO> proCreateSumVoucher() {
return sessionTemplate.selectList("com.elis.finance.mapper.PropJournalMapper.proCreateSumVoucher);
}

说明:应用一是spring1.2+hibernate3,应用二是spring3x+myibatis,现在的情况是应用一,应用二单独使用没有任何问题(或者没有发现问题),当应用一使用webservice调用应用二的方法,一段时间后或者持续并发调用后,应用一出现线程池爆膨,其他功能无法连接到数据库(处于等待状态),webservice还是可以继续调用,使用正常,当在datasource配置上添加destory方法后,问题得到解决(或者伪解决),请帮忙看看问题所在
2013年4月26日 10:56

1个答案 按时间排序 按投票排序

0 0

采纳的答案

从你的描述来看
1、就是webservice请求的太快造成拿到连接处理 但并没有很快释放
2、webservice调用的代码没有释放连接

怎么判断有没有释放连接:
自己调用下webservice 然后调用完成后 看看连接池的连接释放了吗 如果没有说明【2】 否则就是【1】 增大连接池大小

2013年4月26日 11:52

相关推荐

    数据库连接池技术详解

    对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接的配置,实现数据库连接池技术。某一应用最大可用数据库连接数的限制,避免某一应用独占所有数据库资源。 在较为完备的数据库连接池实现中,可根据...

    Java 数据库连接泄漏 解决方法

    基于weblogic,应对数据库连接泄漏的解决方法; 包含临时解决方法和数据连接池泄露监控,并可追踪到某个类某行代码。

    数据源和连接池

    在实际项目的开发中,特别是web应用程序中,如Jsp,Servlet或EJB使用JDBC直接访问数据库中的...使用数据库连接池技术是解决上述问题的最常用的方法,在许多应用服务器(如 websphere, weblogic ,jBoss)中都提供了这种技术

    【ASP.NET编程知识】.NET连接池的问题详解.docx

    .NET 连接池的问题详解 .NET 连接池是 ASP.NET 编程知识中一个重要的概念,用于提高应用程序的性能和可扩展性。连接池的使用可以减少打开和关闭连接的时间,从而提高应用程序的响应速度。然而,当应用程序突然涌入...

    Java Spring常用高性能连接池以及属性

    * Proxool的负面评价较少,现在比较推荐它,而且它还提供即时监控连接池状态的功能,便于发现连接泄漏的情况。 * Tomcat JDBC-POOL速度较快,并且支持的功能较多 ...

    Druid连接泄露问题重现&解决方式.pdf

    Druid连接泄露问题重现&解决方式

    proxool连接池jar包

    Proxool是一种Java数据库连接池技术。是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。

    SmartPool连接池组件

    SmartPool是一个连接池组件,它模仿应用服务器对象池的特性。SmartPool能够解决一些临界问题如连接泄漏(connection leaks),连接阻塞,打开的JDBC对象如Statements,PreparedStatements等. SmartPool的特性包括支持多个...

    delphiADO数据库连接池

    1.从网上找来的代码,作了点修改,增加初始化连接数量。 2.修改原来版本中,free时很慢的情况。 3.修改原来版本中,free时有内存泄露的情况。 此连接池可以自动释放掉空闲的连接。

    JSP教程_数据库连接池技术[整理].pdf

    JSP教程_数据库连接池技术 数据库连接池技术是JSP开发中的一种重要技术,它可以大大提高数据库访问速度和性能。本章主要介绍数据库连接池技术的概念、原理、优缺点和配置方式。 数据库连接池技术的介绍 数据库...

    数据库连接池技术及其在Web系统开发中的应用.pdf

    数据库连接池技术可以解决这些问题,它可以对数据库连接进行管理,一方面应用程序通过连接池获得连接,即通过与数据库交互直接获得并释放连接,为多个用户提供高效的数据库连接共享。连接池可以避免频繁建立和关闭...

    java-JSP数据库连接池的研究与实现(源代码+论文)

    针对这些突出问题,因此提出了一种基于数据库连接池技术的有效解决方法。简而言之,数据库连接池主要作用是负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不再是重新建立一个;...

    数据库连接池

    使用数据库连接池技术的好处 ... 统一的连接管理,避免数据库连接泄漏 在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接。从而避免了常规数据库连接操作中可能出现的资源泄漏。

    Java_jdbc数据库连接池总结.doc

     程序开发,存在很多问题:首先,每一次Web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统...

    hiredispool:为hiredis提供连接池和自动重新连接。 它也极简且易于定制

    该库提供hireddis的连接池和自动重新连接。 它也是简约的,易于定制。 该代码已在多线程应用程序中经过全面测试,并在生产环境中使用了很长时间。 它被证明是线程安全的,并且没有内存泄漏。 特征 用纯C实现的连接池...

    Druid:用Java编写的数据库连接池-开源

    Druid是用Java编写的开源数据库连接池。 Druid能够为数据库连接提供大量强大的监视功能。 Druid已部署到Maven中央存储库。 Druid提供了可通过过滤链实现的监视功能。 它还带有WallFilter,它基于SQL语义分析来防止...

    Java数据库连接池之proxool_动力节点Java学院整理

    Proxool是一种Java数据库连接池技术。方便易用,便于发现连接泄漏的情况

    weblogic,log4j,druid,hibernate,spring,struts2连接泄露检测

    weblogic,log4j,druid,hibernate,spring,struts2,hutoolDb,Oracle连接池配置,连接泄露检测及简要原理说明 连接关了关,怎么用druid检测

    NativeSQLPersistence:使用本机 Java 连接池执行本机 SQL。-开源

    包含纯 Java 连接池,可用于胖客户端、Web 应用程序、批处理作业 - 一切基于 Java。 导出功能可用:CSV、HTML、XML、XML-Spreadsheets (Excel) 可用作 XA 和 None-XA 数据源,语句参数可用。 JPA 库用于提供 ...

Global site tag (gtag.js) - Google Analytics