Java Tomcat JNDI PSQLException:此连接已关闭

Java Tomcat JNDI PSQLException:此连接已关闭,java,hibernate,postgresql,tomcat,grails,Java,Hibernate,Postgresql,Tomcat,Grails,我们已经部署了几个在同一个tomcat容器中运行的应用程序,并通过JNDI查找连接到我们的postgresql数据库。以下是经过清理的配置(server.xml): 临时修复方法是重新启动tomcat7服务,我假设它重新打开了关闭的DB连接。但现在我正在调查根本原因,希望能找到长期的解决办法。我在catalina.out找到了: 2015-02-09 14:15:55,260 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] - SQ

我们已经部署了几个在同一个tomcat容器中运行的应用程序,并通过JNDI查找连接到我们的postgresql数据库。以下是经过清理的配置(
server.xml
):

临时修复方法是重新启动
tomcat7
服务,我假设它重新打开了关闭的DB连接。但现在我正在调查根本原因,希望能找到长期的解决办法。我在catalina.out找到了:

2015-02-09 14:15:55,260 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] - SQL Error: 0, SQLState: 08003
从我看来,这意味着连接不存在


我在谷歌上搜索了一下,找不到与这个问题相关的内容。我认为,如果一个连接被关闭,它将由JDBC、Hibernate甚至GORM(对于grails应用程序)处理。这里我是否遗漏了一些明显的内容?

检查
commons dbcp
BasicDataSource
的代码,我得出的结论是,通过将
validationQuery
指定为数据源的属性,我们允许容器在连接到达我们的代码之前验证连接是否有效。当然,在tomcat验证连接和到达我们的代码之间,仍然有一小部分连接失效的可能性,因此这种解决方案并不理想。简而言之:

<Resource name="MyDataSource" 
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="org.postgresql.Driver" 
    url="jdbc:postgresql://myrdsinstance.com:5432/MyDatabase"
    username="my_username"
    password="my_password"
    validationQuery="SELECT 1" />

希望有比这更好的解决方案,但我想我会把我们为其他谷歌人所做的事情张贴出来

2015-02-09 14:15:55,260 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] - SQL Error: 0, SQLState: 08003
<Resource name="MyDataSource" 
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="org.postgresql.Driver" 
    url="jdbc:postgresql://myrdsinstance.com:5432/MyDatabase"
    username="my_username"
    password="my_password"
    validationQuery="SELECT 1" />