1

我一直在尝试将我的项目从 grails 2.1.2 升级到 grails 2.4.4。该项目调用了另一个模块(升级到 java 8),它使用 ibatis 进行数据库连接。虽然模块作为独立的工作正常,但从 grails 项目访问时,它会给我“连接关闭”异常。这个应用程序在带有 java 6 的 grails 2.1.2 上运行良好。但是,升级似乎破坏了一些东西。

异常:原因:java.sql.SQLException:PooledConnection 已关闭。在 org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:86) 在 com.sun.proxy.$Proxy35.prepareStatement(Unknown Source) 在 sun.reflect.GeneratedMethodAccessor354.invoke(Unknown Source) 在 sun .reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1270) at org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy$LazyConnectionInvocationHandler.invoke(LazyConnectionDataSourceProxy.java:376) 在 com.sun.proxy.$Proxy37.prepareStatement(Unknown Source) 在 sun.reflect.GeneratedMethodAccessor354。

我在网上搜索了其他类似的问题,但我似乎没有遇到提到的任何问题。我的日志中没有看到任何已放弃的连接。同样从数据库方面我看到有两个连接仍然存在(最小空闲连接设置为 2)。

数据源.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-pool 来创建数据库连接。然后将此连接发送到第二个模块(使用 ibatis)

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

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
 }

BuildConfig.groovy: 编译('com.mchange:c3p0:0.9.5.1')

4

0 回答 0