gpt4 book ai didi

tomcat - Grails/Tomcat/MySQL 过时连接错误,即使在使用 JNDI 时也是如此?

转载 作者:行者123 更新时间:2023-11-28 22:10:03 25 4
gpt4 key购买 nike

我有几个在 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。

最佳答案

对于 MySQL 和 Grails,最好的做法是对数据库池进行验证查询。您可以附加到您的定义:

validationQuery="SELECT 1"

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

关于tomcat - Grails/Tomcat/MySQL 过时连接错误,即使在使用 JNDI 时也是如此?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4194917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com