首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grails/Tomcat/MySQL陈旧的连接错误,即使在使用JNDI时?

问Grails/Tomcat/MySQL陈旧的连接错误,即使在使用JNDI时?
EN

Stack Overflow用户
提问于 2010-11-16 14:01:10
回答 1查看 1.5K关注 0票数 1

我在Tomcat 6.0.18上运行了几个Grails 1.3.3应用程序。在使用默认Grails数据源时,我意识到了数据库连接延迟问题(在一段时间不活动之后连接被终止),所以我切换到Tomcat提供的JNDI。

我部署的第一个应用程序从未出现过任何陈旧的数据库连接问题。现在,我使用相同的JNDI数据源配置将第二个应用部署到同一服务器上,虽然第一个应用程序继续正常工作,但第二个应用程序在大约8小时的不活动后得到连接超时错误。(错误发生后,连接将被刷新,并再次正常工作)

在Tomcat的context.xml中,数据源定义如下:

代码语言:javascript
复制
<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之外,一切都是完全相同的):

代码语言:javascript
复制
dataSource {
    pooled = false
}
...
environments {
    ...
    production {
        dataSource {
            dbCreate = "update"
            jndiName = "java:comp/env/jdbc/firstApp"
        }
    }
}

我知道这两种情况之间唯一的区别是工作应用程序使用MyISAM表,而不工作的应用程序使用InnoDB表。有没有人经历过InnoDB和Tomcat连接池的问题?如果找不到其他可以尝试的东西,我可能会尝试切换到MyISAM。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-18 10:00:08

对于MySQL和Grails,最好在db池上进行验证查询。您可以在定义中附加以下内容:

代码语言:javascript
复制
validationQuery="SELECT 1"

另见http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html#JDBC_Data_Sources

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4194917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档