durid连接池获取连接的时间太长

追风少年201 2018-04-12 04:47:39
你好。我用servlet通过配置文件获取durid连接池中连接,在这里,我的数据库密码错误的情况下,每次都是第一次从连接池中取connection时很快,但第二次取connection时很慢,原因何在?
(1)连接池的部分配置:
initialSize = 10
maxActive = 100
minIdle = 3
maxWait = 10000
removeAbandoned = true
removeAbandonedTimeout = 180
timeBetweenEvictionRunsMillis = 20000
minEvictableIdleTimeMillis = 50000
validationQuery = SELECT 1 FROM DUAL
testWhileIdle = true
testOnBorrow = false
testOnReturn = false
poolPreparedStatements = false
maxPoolPreparedStatementPerConnectionSize = 50
filters =stat
(2)数据源的创建
/**
* 初始化连接 dataSource
*
* @param ConfigName
*/
public static void initdataSource(Properties ps) {
try {
dataSource = DruidDataSourceFactory.createDataSource(ps);
}
catch (Exception e) {
e.printStackTrace();
}

}
(3)连接的获取
public static Connection getConnection() throws Exception {
try {
return dataSource.getConnection();
} catch (GetConnectionTimeoutException e) {
throw new Exception("数据库连接有问题,连接超时!", e);
}catch (SQLException e) {
throw new Exception("数据库连接有问题,账号或密码错误!", e);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
我的瓶颈就是在dataSource.getConnection()当数据库连接发生错误时第二次获取时间太长
...全文
1474 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
追风少年201 2018-04-12
  • 打赏
  • 举报
回复
在此,本人已解决,问题原因在dataSource上,我这里dataSource为静态变量。当正常连接时,共用一个dataSource,没问题,但是当密码报错时,dataSource实际上是没有连接到连接池的,没有用到durid连接池的配置,而以后的连接都是用上一个数据源dataSource,而上一个数据源未回收,而我们在框架里引用的数据源已经被连接池管理,与servlet有区别。 解决方法:当连接发生错误时,必须要重新初始化数据源。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧