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

君子不器 2015年10月22日 数据库 4080次阅读 查看评论

 

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都弃用(不赞成)了,因此在使用此

功能的时候多多注意。

« 上一篇 下一篇 » 君子不器原创文章,转载请注明出处! 标签:Javaweblogic数据库

相关日志:

博主介绍
乌云蔽月,人迹踪绝,说不出如斯寂寞。
控制面板
您好,欢迎到访网站!
  [查看权限]
站点信息
  • 文章总数:1279
  • 页面总数:2
  • 分类总数:9
  • 标签总数:61
  • 评论总数:331
标签列表
友情链接