9
回答
有人熟悉阿里的 druid 的连接池么?
注册华为云得mate10,2.9折抢先购!>>>   
J2EE项目
现在项目尾声了,发现N多地方 没有释放druid连接池所持有的数据库连接。

于是我想出来一个方案
就是写一个全局的过滤器 每个访问都检查druid连接池内的连接数,一旦过多连接没有释放的话。
要么手动释放数据库连接,要么重新初始化连接池。


现在我想请问下 这个方案可行么? 怎么能获取连接池内的连接数,又怎么手动释放连接或者重新初始化连接池。


PS: 不是druid的问题。 是项目中很多地方没有释放连接。想亡羊补牢下。。

举报
渔樵耕读
发帖于3年前 9回/2K+阅

国内开源框架。。还是别用了。。文档都不全。。

前段时间想用淘宝的tddl,结果需要他们内部的diamond 坐配置中心,两个项目发布的版本不兼容,官方网站都打不开。社区论坛提问也没人理。

--- 共有 3 条评论 ---
渔樵耕读回复 @zfc827 : 我调用别人的包。他用的连接池。。 3年前 回复
zfc827回复 @渔樵耕读 : 换个连接池应该没多大工作量吧 3年前 回复
渔樵耕读现在已经晚了 骑虎难下了。 3年前 回复
我用了很长时间的druid啊,也没发现这类的问题呢,再者说,你需要自己释放连接么?连接池里面有缓存的连接是正常的啊。使用的版本是多少?存不存在Bug啊
--- 共有 7 条评论 ---
渔樵耕读回复 @battyman : ok 3q 我知道该怎么办了! 十分感谢! 3年前 回复
渔樵耕读回复 @battyman : 看来最小生存时间、最大生存时间的参数与系统预估的访问人次产生的数据库连接数之间应该调整一个合理的策略了! 3年前 回复
battyman回复 @渔樵耕读 : 针对你这个问题,你可以在classpath下面重写对方接口的配置加载策略。如果对方是以配置文件方式提供的,则修改配置文件;如果配置文件放在jar包里,就在classpath下起同样路径覆盖。如果使用的是Spring,则硬注入一个使用你自己配置的DruidDataSource,如果什么都不管用的话,只有在classpath下覆盖写一个同包名同类名,拷贝反编译后的源码,自己修改吧 3年前 回复
battyman回复 @渔樵耕读 : Druid是自己管理的连接池中的连接的存活,有个minEvictableIdleTimeMillis(最小生存时间)、removeAbandonedTimeout(最长生存时间,一般我们不设置,因为无法预估实际业务至少要跑多长时间)。所以说,一段时间过后,连接池中的连接就会自动被关闭的,时间长短看minEvictableIdleTimeMillis的设置。 3年前 回复
渔樵耕读回复 @battyman : 真心感谢认真回复! 对方接口我反编译看源码了。。所有方法都是释放的ResultSet 并没有释放DruidPooledConnection。  但是没人维护这个接口但还必须得用。 公司的政治你懂得。 所以我想怎么才能绕开的他的东西 我自己控制呢。  3年前 回复

调用别人的包,而别人的代码没有关闭连接

我认为这个方法不行,假如这个时候有一些线程正在稳定的执行,这时又有新的线程开始执行,发现连接池中没连接了,把之前正在执行的线程连接干掉了,事务还没提交,这岂不是会数据丢失

--- 共有 1 条评论 ---
渔樵耕读判断连接池内 那些是正在使用的连接,那些是活动的但是没被使用的连接? 可行否 3年前 回复
阿里出品,必是废品
--- 共有 4 条评论 ---
原来如此这个同学说的太…… 这个连接池,我在好几个生产环境使用过,且这个连接池扩展性很好,挺稳定的 3年前 回复
兮风古道回复 @battyman : 系统选型,千万别选阿里系的,开源出来的都是残次品,更妄谈社区了。 我只能帮到这儿了,自求多福 3年前 回复
渔樵耕读这位童鞋说的也太绝对~ 3年前 回复
battyman不懂的、没有使用过的请别乱讲。我在很多项目里面使用过druid(现在用的是v1.0.4),合理的配置连接池参数,系统上线这么长时间也没出现过问题,还是比较稳定的 3年前 回复
顶部