我在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"
/>
非常感谢任何建议。
答案 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将是我的推荐。