0

我有一个在 Tomcat 7 下运行的 Grails 应用程序,但在管理 MySQL 连接时遇到问题。

问题是对应用程序的每个新请求(即页面加载)都在创建一个新的 MySQL 连接,并且这些连接没有关闭。相反,它们一直处于 SLEEP 状态,直到 MySQL 服务器最终拒绝接受更多连接。因此,只需快速重新加载站点上的各个页面,就可以创建大量数据库连接。

所以似乎我的连接池没有足够快地关闭与 MySQL 的连接。连接池有许多配置设置,但我不确定需要调整什么来避免这个问题。

这是我的 context.xml 文件中的配置:

        <Resource name="jdbc/Production" auth="Container" type="javax.sql.DataSource"
            maxActive="100"
            maxIdle="30"
            maxWait="10000"
            minEvictableIdleTimeMillis="1800000"
            timeBetweenEvictionRunsMillis="1800000"
            numTestsPerEvictionRun="3"
            removeAbandoned="true"
            removeAbandonedTimeout="60"
            logAbandoned="true"
            testOnBorrow="true"
            testWhileIdle="true"
            testOnReturn="true"
            validationQuery="SELECT 1"
            username=""
            password=""
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost/Production"
    />

非常感谢您的任何建议。

4

1 回答 1

1

您没有定义连接池。

将以下代码添加到 context.xml(它似乎是一个 JNDI 数据源):

pooled = "true"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"

如果您还没有将 JDBC Pool 放入依赖项配置中,请plugins在 BuildConfig.groovy 的闭包中添加以下内容:

compile ":jdbc-pool:1.0.9.3"

您可以使用其他连接池,但我建议使用 JDBC 池。

于 2013-03-11T16:16:32.573 回答