У меня есть пара приложений Grails 1.3.3, работающих на Tomcat 6.0.18. Мне известно о проблеме устаревания соединения с базой данных при использовании источника данных Grails по умолчанию (соединение прерывается после определенного периода бездействия), поэтому я переключился на JNDI, предоставленный Tomcat.
В первом развернутом приложении никогда не возникало проблем с подключением к базе данных. Теперь я развернул второе приложение на том же сервере с той же конфигурацией источника данных 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" />
Оба приложения используют источник данных JNDI в файле Datasource.groovy следующим образом (все точно так же, за исключением jndiName):
dataSource {
pooled = false
}
...
environments {
...
production {
dataSource {
dbCreate = "update"
jndiName = "java:comp/env/jdbc/firstApp"
}
}
}
Разница ONLY , о которой я знаю, между этими двумя ситуациями заключается в том, что работающее приложение использует таблицы MyISAM, а нерабочее приложение использует таблицы InnoDB. Кто-нибудь испытывал проблему с пулами соединений InnoDB и Tomcat? Я могу попробовать перейти на MyISAM, если я не могу найти что-нибудь еще, чтобы попробовать.