我在Tomcat 6.0.18上运行了几个Grails 1.3.3应用程序。在使用默认Grails数据源时,我意识到了数据库连接延迟问题(在一段时间不活动之后连接被终止),所以我切换到Tomcat提供的JNDI。
我部署的第一个应用程序从未出现过任何陈旧的数据库连接问题。现在,我使用相同的JNDI数据源配置将第二个应用部署到同一服务器上,虽然第一个应用程序继续正常工作,但第二个应用程序在大约8小时的不活动后得到连接超时错误。(错误发生后,连接将被刷新,并再次正常工作)
在Tomcat的context.xml中,数据源定义如下:
<Resource name="jdbc/firstDs" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="user1" password="password1" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/firstApp" />
<Resource name="jdbc/secondDs" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="user2" password="password2" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/secondApp" />这两个应用程序都使用Datasource.groovy文件中的JNDI数据源,如下所示(除了jndiName之外,一切都是完全相同的):
dataSource {
pooled = false
}
...
environments {
...
production {
dataSource {
dbCreate = "update"
jndiName = "java:comp/env/jdbc/firstApp"
}
}
}我知道这两种情况之间唯一的区别是工作应用程序使用MyISAM表,而不工作的应用程序使用InnoDB表。有没有人经历过InnoDB和Tomcat连接池的问题?如果找不到其他可以尝试的东西,我可能会尝试切换到MyISAM。
发布于 2010-11-18 10:00:08
对于MySQL和Grails,最好在db池上进行验证查询。您可以在定义中附加以下内容:
validationQuery="SELECT 1"另见http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html#JDBC_Data_Sources
https://stackoverflow.com/questions/4194917
复制相似问题