java - Tomcat 连接池配置 : DataSource type and "Too many connection" error

标签 java mysql tomcat database-connection connection-pooling

我正在通过 JNDI 资源使用 tomcat 连接池。

context.xml中:

<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
          username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
          maxActive="1000" maxIdle="100" maxWait="10000"
          url="jdbc:mysql://localhost:3306/mydatabase" 
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" />

web.xml 中:

<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mydb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

从我需要数据库连接的 java 类中,我执行以下查找:

Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("java:/comp/env/jdbc/mydb");

我第一个疑惑是DataSource类型。使用 javax.sql.DataSourceorg.apache.tomcat.jdbc.pool.DataSource 是否一样?

此外,有时我会收到“连接太多”错误。 我已经阅读了许多关于此的 stackoverflow 问题/答案,但我没有成功地理解问题可能出在哪里。

我遵循了 tomcat 文档,并正确关闭了结果集、语句和连接。

编辑

我的tomcat版本是7.0.26。所以应该有一个错误(参见 informatik01 用户建议的链接)

最佳答案

如果您将 JDBC 资源放在 $CATALINA_HOME/conf/context.xml 中,它会为您部署的每个 Web 应用加载资源。 (这可能意味着大量的连接)如果您将该资源移动到您的 webapp 的 META-INF/context.xml 中,它只会在部署该特定 webapp 时加载。 http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html

也可能是您的 maxActive 和 maxIdle 太多了。

关于java - Tomcat 连接池配置 : DataSource type and "Too many connection" error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14760177/

相关文章:

java - 解析 CSV 文件并将值存储在变量中

php - 具有不同字段集的记录的数据库设计

php - 如何从表中删除除最新的 10 行之外的所有行

java - xsd :datetime and XmlGregorianCalendar causes NullPointerException

java - Tomcat - 当 ServletContextListener 失败时重定向到错误页面

tomcat - 通过LDAP SSL的Active Directory-开发环境与Tomcat-Grails Web应用

java - 安卓发布请求

java - 仅启用 2 个 Swing 复选框中的 1 个

java - Activity 无法转换为 com.google.android.gms.common.api.GoogleApiClient$ConnectionCallbacks

java逆向代码从纬度和经度获取地址