2010-11-16 68 views
1

我有几个运行在Tomcat 6.0.18上的Grails 1.3.3应用程序。我知道使用默认的Grails数据源时数据库连接过时问题(连接在不活动一段时间后终止),所以我切换到Tomcat提供的JNDI。即使使用JNDI,Grails/Tomcat/MySQL失效连接错误?

我部署的第一个应用程序从来没有任何陈旧的数据库连接问题。现在,我使用相同的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数据源的数据源。常规文件如下(一切都是一模一样的,除了jndiName):

dataSource { 
    pooled = false 
} 
... 
environments { 
    ... 
    production { 
     dataSource { 
      dbCreate = "update" 
      jndiName = "java:comp/env/jdbc/firstApp" 
     } 
    } 
} 

ONLY差我所知道的这两个之间的情况是,工作的应用程序使用MyISAM表,而日非工作应用程序使用InnoDB表。有没有人遇到过InnoDB和Tomcat连接池的问题?如果我找不到其他的东西来尝试,我可以尝试切换到MyISAM。

+0

见异常堆栈跟踪将是有益的。 - 我还会登录'warn'级别,包括'org.hibernate','org.springframework'和'com.mysql'。如果有的话,当发生异常时,指示器应该位于日志文件的末尾。 – robbbert 2010-11-16 14:52:22

+0

这对我有用(不是jndi,所以我提供了一个评论,而不是和答案):http://www.sylvioazevedo.com.br/?p=56 – 2010-11-16 18:14:32

+0

不要切换到MyISAM - 没有办法有什么作用。 – 2010-11-16 23:58:54

回答