【问题标题】:tomcat-jdbc Datasource PoolProperties configurationtomcat-jdbc 数据源 PoolProperties 配置
【发布时间】:2014-07-07 13:54:29
【问题描述】:

我正在使用 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>我经常从数据源获得连接。有时它会超过 maxActive。同时,数据库中的某些连接处于睡眠模式。睡眠连接在 MinEvictableIdleTimeMillis 之后关闭。所以我收到以下错误

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

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

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

【问题讨论】:

    标签: tomcat jdbc datasource connection-pooling


    【解决方案1】:

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

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

    【讨论】:

    • 我正在使用 spring jdbc 来处理连接。数据源在 MinEvictableIdleTimeMillis 之后正确关闭连接。
    猜你喜欢
    • 2011-02-27
    • 1970-01-01
    • 2011-01-29
    • 2018-03-22
    • 2020-03-03
    • 2014-01-18
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    相关资源
    最近更新 更多