连接池泄露的问题

问题描述

昨天发的帖子可能描述的不是很清楚,今天整理了再发一次,求大师们帮忙看看,两个帖子一起结!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调用:@Repositorypublic class PropJournalMapper {@Autowiredprivate SqlSessionTemplate sessionTemplate;public List<PropJournalDTO> proCreateSumVoucher() {return sessionTemplate.selectList("com.elis.finance.mapper.PropJournalMapper.proCreateSumVoucher);}说明:应用一是spring1.2+hibernate3,应用二是spring3x+myibatis,现在的情况是应用一,应用二单独使用没有任何问题(或者没有发现问题),当应用一使用webservice调用应用二的方法,一段时间后或者持续并发调用后,应用一出现线程池爆膨,其他功能无法连接到数据库(处于等待状态),webservice还是可以继续调用,使用正常,当在datasource配置上添加destory方法后,问题得到解决(或者伪解决),请帮忙看看问题所在

解决方案

从你的描述来看 1、就是webservice请求的太快造成拿到连接处理 但并没有很快释放2、webservice调用的代码没有释放连接怎么判断有没有释放连接:自己调用下webservice 然后调用完成后 看看连接池的连接释放了吗 如果没有说明【2】 否则就是【1】 增大连接池大小

时间: 2025-01-02 21:16:57

连接池泄露的问题的相关文章

Netty的http client连接池设计

1 复用类型的选型 1.1 channel 复用 多个请求可以共用一个channel 模型如下:                                                特点: callback队列为回调队列. 不同的callback通过一个全局的id进行标识.发送的时候会把该id发到服务端,服务端在回复的时候必须把该id再返回到客户端. 获取连接只需要随机获取一个channel即可,将callback添加到队列里面.  获取连接时消除了锁的竞争,性能高效. 结构简单.  

java 断开从连接池中获取的连接,规范的操作是怎样的

问题描述 java断开从连接池中获取的连接,规范的操作是怎样的,ResultSet,PreparedStatement,Connection是否需要依次关闭,若需要,应该怎么做才是高效率,规范,而且不会发生内存泄露.涉及到很多try和catch,不知怎么处理. 解决方案 解决方案二:ResultSet,PreparedStatement,Connection是否需要依次关闭需要应该怎么做才是高效率写一个函数用来关闭,如放在的帮助类JdbcUtil里,如publicstaticvoidreleas

spring学习笔记(17)数据库配置[1]spring数据连接池详解

数据连接池 在spring中,常使用数据库连接池来完成对数据库的连接配置,类似于线程池的定义,数据库连接池就是维护有一定数量数据库连接的一个缓冲池,一方面,能够即取即用,免去初始化的时间,另一方面,用完的数据连接会归还到连接池中,这样就免去了不必要的连接创建.销毁工作,提升了性能.当然,使用连接池,有一下几点是连接池配置所考虑到的,也属于配置连接池的优点,而这些也会我们后面的实例配置中体现: 1. 如果没有任何一个用户使用连接,那么那么应该维持一定数量的连接,等待用户使用. 2. 如果连接已经满

OkHttp 3.7源码分析(五)——连接池

OkHttp3.7源码分析文章列表如下: OkHttp源码分析--整体架构 OkHttp源码分析--拦截器 OkHttp源码分析--任务队列 OkHttp源码分析--缓存策略 OkHttp源码分析--多路复用 接下来讲下OkHttp的连接池管理,这也是OkHttp的核心部分.通过维护连接池,最大限度重用现有连接,减少网络连接的创建开销,以此提升网络请求效率. 1. 背景 1.1 keep-alive机制 在HTTP1.0中HTTP的请求流程如下: 这种方法的好处是简单,各个请求互不干扰.但在复杂

关于WAS连接池的问题

问题描述 最近公司的WAS服务器经常出问题,表现为用户请求页面速度慢,甚至无法打开,直接报数据库连接失败,我对当时的系统日志进行了分析,怀疑当时的连接池满了,因此我在测试环境上做了测试,发现连接池满了以后重现了当时用户情况.因此查看了WAS的性能分析,发现有几个地方搞不太清楚:请看下图中:这张图是目前WAS重启后运行1天的情况,我发现POOLSIZE是39,freePoolSize=0,Percentused=39%,说明现在无空闲连接池,连接池的平均使用效率是39%,目前WAS连接池设置min

连接池-关于Java服务长时间运行出现各种bug问题,可能运行几天没问题,但是运行十几天就会出现各种bug

问题描述 关于Java服务长时间运行出现各种bug问题,可能运行几天没问题,但是运行十几天就会出现各种bug 服务使用的是ScheduledThreadPoolExecuto定时任务,有使用到全局变量,数据库连接池使用的是c3p0,我感觉出现问题的原因可能就是这三个里哪个导致的,程序是没问题的,就是运行久了就出现各种问题了,而且很莫明奇妙,比如本来是好好的运行久了日志中的中文从那个时刻起往后全都乱码了.请问这是怎么回事? 定时任务: ScheduledThreadPoolExecutor boo

c3p0连接池中获取的Connection对象的close()方法是真的把连接给关闭了?

问题描述 c3p0连接池中获取的Connection对象的close()方法是真的把连接给关闭了? 自己做写了一个管理数据源的DBManager,构想中从数据源里面获取的Connection使用完之后执行close()方法,然后把Connection对象闲置回连接池中. 但是测试出来的结果好像每次执行close()之后connection就销毁了. 代码如下: DBManager.java package ben.DBUtils; import java.sql.Connection; impo

使用tomcat5.0自带的连接池

近来对连接池产生了兴趣,就自己动手试了试,本以为自己写的连接池没有问题,结果和同学交流,他说我虽然写了连接池,可是在编程时并没有用到,本人比较懒,所以就没有修改,想直接使用tomcat的连接池就好. 首先修改server.xml文件:         <Context path="" docBase="my site" debug="0" reloadable="true"   crossContext="tr

Tomcat+SQL Server2000连接池配置

server|server2000|sql 终于解决了困扰多天的连接池的问题,写下这编文章与大家一起分享.我是在tomcat5.5.9下配置的,tomcat5.5.X和以前的版本有一些差别,所以配置上也有差别.我就说一下在tomcat5.5.9配置的基本步骤:(确定你以安装好tomcat5.5.9.sql2000) 1.把数据库JDBC驱动拷贝到%TOMCAT_HOME%/common/lib和%TOMCAT_HOME%/webapps/yourweb/WEB-INF/lib下(我的web文件夹