DBCP object created 日期 by the following code was never closed:

1、分析

  看到标题 DBCP 首先想到的肯定是 数据库连接池哪方面有问题,那么先别着急去解决,不要一股脑就钻进逻辑代码中,然后启用调试就开始一步一步

的分析。我们首先要做的就是想,想想数据库连接池,在项目中是如何实现的,那么不管你或早或晚,都会想到数据库连接池相关的配置文件和代码。那么

问题来了,是否是配置文件配置的有问题(挖掘技术哪家强?)?

  那么先来分析下各项连接池配置的属性:

  #回收被遗弃的(一般是忘了释放的)数据库连接到连接池中。
  dataBase.removeAbandoned =false

  # 数据库连接过多长时间不用将被视为被遗弃而收回连接池中。
  dataBase.removeAbandonedTimeout = 30

  # 将被遗弃的数据库连接的回收记入日志。
  dataBase.logAbandoned = false

  #连接池的最大数据库连接数,设为0 表示无限制。
  dataBase.maxActive = 200

  #数据库连接的最大空闲连接数。超过此空闲连接数,,数据库连接将被标记为不可用,然后被释放。设为0 表示无限制。
  dataBase.maxIdle=40

  #最大建立连接等待时间。如果超过此时间将接到异常。设为-1 表示无限制
  dataBase.maxWait=10000

  #取得、返回对象和空闲时是否进行验证,检查对象是否有效,默认都为false即不验证
  dataBase.testOnBorrow=true
  dataBase.testWhileIdle=true
  dataBase.testOnReturn=true
  dataBase.validationQuery=select 1 from dual

  说明:

  1. #回收被遗弃的(一般是忘了释放的)数据库连接到连接池中。
  dataBase.removeAbandoned =false

  如果这个值为true一般是用来调试的时候用的,正式发布后应该改为false,2. # 将被遗弃的数据库连接的回收记入日志。

  dataBase.logAbandoned = false

  这个如果设置为true就会引起如下错误:
  DBCP object created 日期 by the following code was never closed:
  java.lang.Exception
  

  3.#连接池的最大数据库连接数,设为0 表示无限制。

  dataBase.maxActive = 200

  #数据库连接的最大空闲时间。超过此空闲时间,数据库连接将被标记为不可用,然后被释放。设为0 表示无限制。
  dataBase.maxIdle=40

  会有可能出现:Cannot get a connection, pool error Timeout waiting for idle object这样的错误

  (转载网上资料)  

2、深入

  不小心暴露的解决方法,那么 到底是为什么呢?

  原因是:dataBase.removeAbandoned = true

  设置为true以后,使用这个配置将会使用AbandonedObjectPool,同时上方也提到过,此配置只建议在开发阶段使用

  因为,AbandonedObjectPool能帮你发现占用连接过长的代码,比如LOG信息,说明getCustomerOnline占用连接的时间

  超过了removeAbandonedTimeout设定的时间,所以设置dataBase.removeAbandoned = false就行了,

  AbandonedObjectPool只在开发使用,在后续的版本会去掉,并且现在的API都弃用(不赞成)了,因此在使用此

  功能的时候多多注意。

  

时间: 2024-11-08 21:46:23

DBCP object created 日期 by the following code was never closed:的相关文章

IMP-00041: Warning: object created with compilation warnings

IMP-00041: Warning: object created with compilation warnings 昨天导入数据的时候,最后报错 IMP-00041: Warning: object created with compilation warnings  "CREATE TRIGGER "KFPT2".SYN_khgl_qyjbxx_D after delete on khgl_qyjbxx  for e"  "ach row decl

tomcat dbcp 基于jndi配置时出现java.sql.SQLException: Already closed

最近观察生产环境发现一个现象,一段时间不操作,再重新操作时,数据库连接第一次会出现:java.sql.SQLException: Already closed.,如下: 数据源是用tomcat dbcp 基于jndi配置管理的,查了下,如下: 原因: You're probably running into the fact that MYSQL closes connections  which have been open "too long". Probably if you m

Object Detection with 10 lines of code - Image AI

To perform object detection using ImageAI, all you need to do is Install Python on your computer system Install ImageAI and its dependencies 3. Download the Object Detection model file 4. Run the sample codes (which is as few as 10 lines) Now let's g

Apache DBCP数据库连接池溢出调整

数据库最大连接池溢出是在系统运行中比较常见的一个问题,在开发中,可以通过设置最大连接池的各位为1或者2,就能在开发的时候发现数据库连接没有被释放的情况.不过这个小技巧在hibernate和sping等框架大量使用之后就没什么用了. 数据库连接池溢出的源代码: package test.ffm83.commons.dbcp; import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.dbcp.BasicDat

JDBC数据源DBCP源代码情景分析

在之前的一篇博文从JDBC到commons-dbutils 中,我曾经写到,对于获取数据库连接,有一个解决方案,那就是数据源.业界用到的比较普遍的开源数据源解决方案有很多,DBCP是其中一种,今天,我试图从源代码角度去解读这个解决方案. 全文分为三节,第一节介绍DBCP一般的用法,第二节按照第一节中给出的用法,从源代码角度看看,到底程序经过了哪些步骤,第三小节对全文做一个总结. 1.DBCP的一般用法 DBCP的用法其实很简单,一般就是new一个BasicDataSource,然后设置参数,当需

Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization

A code sequence made up multiple instructions and specifying an offset from a base address is identified in an object file. The offset from the base address corresponds to an offset location in a memory configured for storing an address of a variable

Inheritance with EF Code First: Part 3 – Table per Concrete Type (TPC)

Inheritance with EF Code First: Part 3 – Table per Concrete Type (TPC) This is the third (and last) post in a series that explains different approaches to map an inheritance hierarchy with EF Code First. I've described these strategies in previous po

You may experience an access violation when you access an STL object through a pointer or reference in a different DLL or EXE

Symptoms When accessing an STL object created in one DLL or EXE through a pointer or reference in a different DLL or EXE, you may experience an access violation or other serious program errors including the appearance of data corruption or data loss.

ECMAScript6 Object

二.对象 A lot of ECMAScript 6 focused on improving the utility of objects. The focus makes sense given that nearly every value in JavaScript is represented by some type of object. Additionally, the number of objects used in an average JavaScript program