有人熟悉阿里的 druid 的连接池么?
J2EE项目
现在项目尾声了,发现N多地方 没有释放druid连接池所持有的数据库连接。
于是我想出来一个方案
就是写一个全局的过滤器 每个访问都检查druid连接池内的连接数,一旦过多连接没有释放的话。
要么手动释放数据库连接,要么重新初始化连接池。
现在项目尾声了,发现N多地方 没有释放druid连接池所持有的数据库连接。
于是我想出来一个方案
就是写一个全局的过滤器 每个访问都检查druid连接池内的连接数,一旦过多连接没有释放的话。
要么手动释放数据库连接,要么重新初始化连接池。
现在我想请问下 这个方案可行么? 怎么能获取连接池内的连接数,又怎么手动释放连接或者重新初始化连接池。
PS: 不是druid的问题。 是项目中很多地方没有释放连接。想亡羊补牢下。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(21)
问一下楼主 最后是怎么获取连接池内的
我们的好几个项目一直在用,没什么问题啊
不懂的、没有使用过的请别乱讲。我在很多项目里面使用过druid(现在用的是v1.0.4),合理的配置连接池参数,系统上线这么长时间也没出现过问题,还是比较稳定的
这位童鞋说的也太绝对~
这个同学说的太…… 这个连接池,我在好几个生产环境使用过,且这个连接池扩展性很好,挺稳定的
回复
系统选型,千万别选阿里系的,开源出来的都是残次品,更妄谈社区了。 我只能帮到这儿了,自求多福
调用别人的包,而别人的代码没有关闭连接
我认为这个方法不行,假如这个时候有一些线程正在稳定的执行,这时又有新的线程开始执行,发现连接池中没连接了,把之前正在执行的线程连接干掉了,事务还没提交,这岂不是会数据丢失
判断连接池内 那些是正在使用的连接,那些是活动的但是没被使用的连接? 可行否
还行吧,之前用过一个版本有点bug,官网有介绍和详细配置,以及和其他连接池性能对比,可以去看看
回复
真心感谢认真回复! 对方接口我反编译看源码了。。所有方法都是释放的ResultSet 并没有释放DruidPooledConnection。 但是没人维护这个接口但还必须得用。 公司的政治你懂得。 所以我想怎么才能绕开的他的东西 我自己控制呢。
回复
针对你这个问题,你可以在classpath下面重写对方接口的配置加载策略。如果对方是以配置文件方式提供的,则修改配置文件;如果配置文件放在jar包里,就在classpath下起同样路径覆盖。如果使用的是Spring,则硬注入一个使用你自己配置的DruidDataSource,如果什么都不管用的话,只有在classpath下覆盖写一个同包名同类名,拷贝反编译后的源码,自己修改吧
回复
Druid是自己管理的连接池中的连接的存活,有个minEvictableIdleTimeMillis(最小生存时间)、removeAbandonedTimeout(最长生存时间,一般我们不设置,因为无法预估实际业务至少要跑多长时间)。所以说,一段时间过后,连接池中的连接就会自动被关闭的,时间长短看minEvictableIdleTimeMillis的设置。
回复
看来最小生存时间、最大生存时间的参数与系统预估的访问人次产生的数据库连接数之间应该调整一个合理的策略了!
回复
ok 3q 我知道该怎么办了! 十分感谢!
我用了很长时间的druid啊,也没发现这类的问题呢,再者说,你需要自己释放连接么?连接池里面有缓存的连接是正常的啊。使用的版本是多少?存不存在Bug啊
好像现在 OSC 在用。问
@红薯 看看
现在已经晚了 骑虎难下了。
回复
换个连接池应该没多大工作量吧
回复
我调用别人的包。他用的连接池。。
国内开源框架。。还是别用了。。文档都不全。。
前段时间想用淘宝的tddl,结果需要他们内部的diamond 坐配置中心,两个项目发布的版本不兼容,官方网站都打不开。社区论坛提问也没人理。
不熟悉,很早以前用过DBCP。