我使用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 时间设置得更大会增加连接休眠时间。
我确实错误地使用了这些属性。请帮我解决问题。请指导我正确配置数据源。提前致谢
答案 0 :(得分:0)
1)第一个问题看起来已达到服务器中可用的最大连接数。我实际上并不知道它是如何发生的(请查看你的max_connections
MySQL变量以防万一)。您确定从连接池获得了所有连接吗?也许你在java代码中得到了一些不是来自连接池的连接(因为它应该检查它)。还要确保您返回的是您使用的ResultSet
,Statement
和Connection
(在close()
块内为所有这些对象调用finally
方法完成了它们)
2)我不确定为什么要在Web应用程序中保持数据库连接空闲30秒;如果你长时间“占用”你的联系,这可能会导致你的饥饿。请重新考虑是否真的有必要,或者您是否可以重新设计您正在做的任何事情,以便更少限制地使用数据库连接