Java 8 Grails2.4.4:PooledConnection已经关闭

Java 8 Grails2.4.4:PooledConnection已经关闭,java-8,connection-pooling,ibatis,grails-2.4,Java 8,Connection Pooling,Ibatis,Grails 2.4,我一直在尝试将我的项目从Grails2.1.2升级到Grails2.4.4。该项目调用另一个模块(升级到Java8),该模块使用ibatis进行数据库连接。虽然该模块作为一个独立模块运行良好,但当从grails项目访问时,它给了我“连接关闭”异常。 这些应用程序在Grails2.1.2和Java6上运行良好。然而,升级似乎破坏了一些东西 例外情况: 原因:java.sql.SQLException:PooledConnection已关闭。 位于org.apache.tomcat.jdbc.poo

我一直在尝试将我的项目从Grails2.1.2升级到Grails2.4.4。该项目调用另一个模块(升级到Java8),该模块使用ibatis进行数据库连接。虽然该模块作为一个独立模块运行良好,但当从grails项目访问时,它给了我“连接关闭”异常。 这些应用程序在Grails2.1.2和Java6上运行良好。然而,升级似乎破坏了一些东西

例外情况: 原因:java.sql.SQLException:PooledConnection已关闭。 位于org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:86) 在com.sun.proxy.$Proxy35.prepareStatement(未知来源) 位于sun.reflect.GeneratedMethodAccessor354.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:483) 位于org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1270) 位于org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy$LazyConnectionInvocationHandler.invoke(LazyConnectionDataSourceProxy.java:376) 在com.sun.proxy.$Proxy37.prepareStatement(未知来源) 位于sun.reflect.GeneratedMethodAccessor354.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:483) 位于org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1270) 位于org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:240) 在com.sun.proxy.$Proxy37.prepareStatement(未知来源) 位于org.apache.ibatis.executor.statement.PreparedStatementHandler.InstanceStatementState(PreparedStatementHandler.java:87) 位于org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:88) 位于org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java:59) 位于org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:85) 位于org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62) 位于org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324) 位于org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) 位于org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:136) 位于org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148) 位于org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141) 在org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)上 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:483) 位于org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1270) 位于org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:434)

我在网上搜索了其他类似的问题,但我似乎没有遇到任何提到的问题。我在日志中没有看到任何废弃的连接。另外,在DB端,我看到有两个连接仍然处于活动状态(最小空闲连接设置为2)

DataSource.config:

dataSource {
    pooled = true
    driverClassName = "oracle.jdbc.driver.OracleDriver"
    username = xxx
    password = yyy
    dialect = 'org.hibernate.dialect.Oracle10gDialect'
    dbCreate = "none"
    properties {
        maxActive = 15
        maxIdle = 5
        minIdle = 2
        initialSize = 8
        minEvictableIdleTimeMillis = 60000
        timeBetweenEvictionRunsMillis = 60000
        maxWait = 10000
        testOnBorrow = true
        validationQuery = "select 1 from dual"      
    }
}
编辑1: 在我这边进行了更多的调试之后,我发现问题发生在我们将tomcat插件升级到7.0.55版之后。早些时候我们使用的是2.1.2。这个新插件通过JdbcInterceptor使用jdbc池来创建DB连接。然后将此连接发送到第二个模块(使用ibatis)

编辑2:已解决 我们试图围绕上述数据源配置创建一个不同的数据源,将其指向c3p0,并将其放置在resources.groovy中。这被注入到ibatis模块中,我们看到这一次没有出现“连接池关闭”错误。jdbc池似乎存在一些问题,但我们想知道是否还有其他解决方法

resources.groovy中的新配置:

 dataSource_new (ComboPooledDataSource) { bean ->

         idleConnectionTestPeriod = 1 * 60 * 60
         testConnectionOnCheckin = true
         bean.destroyMethod = 'close'
         user = xxx
         password = yyy
         driverClass = <same as in datasource>
         jdbcUrl = zzz
 }
dataSource\u new(ComboPooledDataSource){bean->
idleConnectionTestPeriod=1*60*60
testConnectionOnCheckin=true
bean.destroyMethod='close'
用户=xxx
密码=yyy
驱动器类=
jdbcUrl=zzz
}

BuildConfig.groovy:compile('com.mchange:c3p0:0.9.5.1')

尝试从tomcat lib文件夹中删除
tomcat dbcp
jar,并将所有与db相关的jar添加到tomcat lib文件夹中。我从GGTS ide运行此操作,因此没有看到正在使用的tomcat lib文件夹。常春藤缓存有commons-dbcp2jar(如果您所指的是commons-dbcp2jar)。但在编译和运行时,grails会自动将其删除。@maria您是否尝试过此插件编译'c3p0:c3p0:0.9.1.2',如果请将此插件添加到Buildconfig.groovy文件中谢谢。@DPT您的意思是将该插件与我包含在参考资料中的其他数据源一起使用。groovy?@maria不在参考资料中。groovy您需要添加吗通过从tomcat lib文件夹中删除
tomcat dbcp
jar并将所有与db相关的jar添加到tomcat lib文件夹,将其添加到Buildconfig.groovyTry中。我从GGTS ide运行此操作,因此没有看到正在使用的tomcat lib文件夹。常春藤缓存有commons-dbcp2jar(如果您所指的是commons-dbcp2jar)。但在编译和运行时,grails会自动将其降级。@maria如果请将此插件添加到Bui,您是否尝试过此插件编译“c3p0:c3p0:0.9.1.2”