Grails / Tomcat:数据库连接陷入睡眠状态

时间:2013-03-11 12:44:12

标签: mysql tomcat grails

我在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"
    />

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

您没有定义连接池。

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

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

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

compile ":jdbc-pool:1.0.9.3"

您可以使用其他连接池,但JDBC Pool将是我的推荐。