tomcat-jdbc数据源PoolProperties配置

时间:2014-05-19 14:38:29

标签: tomcat jdbc datasource connection-pooling

我使用tomcat-jdbc连接数据库。我正在使用以下PoolProperties p.setUrl(url); p.setDriverClassName(dirverClassName);//"mysqlDriver" p.setUsername(userName); p.setPassword(passWord); p.setJmxEnabled(true); p.setTestWhileIdle(false); p.setTestOnBorrow(true); p.setValidationQuery(validationQuery);//"select 1" p.setTestOnReturn(false); p.setValidationInterval(30000); p.setTimeBetweenEvictionRunsMillis(30000); p.setMaxActive(8); p.setInitialSize(1); p.setMaxWait(1000*60*1); p.setRemoveAbandonedTimeout(2000); p.setMinEvictableIdleTimeMillis(30000); p.setMinIdle(1); p.setMaxIdle(2); p.setLogAbandoned(true); p.setRemoveAbandoned(true);

我有两个问题

1>我经常从Data-source获取连接。有时它超过maxActive。同时DB中的某些连接处于睡眠模式。在 MinEvictableIdleTimeMillis 之后关闭休眠连接。所以我收到以下错误

`com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"`

2 - ;有时我需要长时间保持连接,因为我在一个实例中插入凸起数据。所以我为MinEvictableIdleTimeMillis设置了很大的值。将 MinEvictableIdleTimeMillis 时间设置得更大会增加连接休眠时间。

我确实错误地使用了这些属性。请帮我解决问题。请指导我正确配置数据源。提前致谢

1 个答案:

答案 0 :(得分:0)

1)第一个问题看起来已达到服务器中可用的最大连接数。我实际上并不知道它是如何发生的(请查看你的max_connections MySQL变量以防万一)。您确定从连接池获得了所有连接吗?也许你在java代码中得到了一些不是来自连接池的连接(因为它应该检查它)。还要确保您返回的是您使用的ResultSetStatementConnection(在close()块内为所有这些对象调用finally方法完成了它们)

2)我不确定为什么要在Web应用程序中保持数据库连接空闲30秒;如果你长时间“占用”你的联系,这可能会导致你的饥饿。请重新考虑是否真的有必要,或者您是否可以重新设计您正在做的任何事情,以便更少限制地使用数据库连接