Java Oracle通用连接池

Java Oracle通用连接池,java,jakarta-ee,jdbc,database-performance,Java,Jakarta Ee,Jdbc,Database Performance,我正在开发一个金融应用程序,其中许多代理经常访问数据库(使用UI)。我正在使用Oracle UniversalConnectionPool进行数据库连接。但很快,它就创建了大量与DB的非活动会话。我对非活动会话没有问题,因为它会将它们放入池中,但问题是,在达到最大限制后,它会给出错误提示 获取连接时发生异常: oracle.ucp.UniversalConnectionPoolException:中的所有连接 通用连接池正在使用中 这是代码,请看一下并提供帮助 private static Po

我正在开发一个金融应用程序,其中许多代理经常访问数据库(使用UI)。我正在使用Oracle UniversalConnectionPool进行数据库连接。但很快,它就创建了大量与DB的非活动会话。我对非活动会话没有问题,因为它会将它们放入池中,但问题是,在达到最大限制后,它会给出错误提示

获取连接时发生异常: oracle.ucp.UniversalConnectionPoolException:中的所有连接 通用连接池正在使用中

这是代码,请看一下并提供帮助

private static PoolDataSource  pds = null;
static UniversalConnectionPoolManager mgr = null;
try{
    pds = PoolDataSourceFactory.getPoolDataSource();
    pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
        pds.setConnectionPoolName("JDBC_UCP");
        
        pds.setInitialPoolSize(2);
        pds.setMinPoolSize(2);
        pds.setMaxPoolSize(10);
        
        pds.setURL("jdbc:oracle:thin:@192.168.4.5:1521:CDIM");
        pds.setUser("baseline");
        pds.setPassword("baseline");
        
        mgr = UniversalConnectionPoolManagerImpl.getUniversalConnectionPoolManager();
        mgr.createConnectionPool((UniversalConnectionPoolAdapter)pds);
        mgr.startConnectionPool("JDBC_UCP");
    }catch(Exception e){
        LogManager.error(DBConnection.class, "getConnection : " + e.getMessage());
    }
像这样获得连接

pds.getConnection();
con.close();
con = null;
像这样紧密的联系

pds.getConnection();
con.close();
con = null;

如果您确定要关闭连接(尽可能),您还应该查看UCP的一些连接管理功能(例如,放弃连接超时和连接捕获)。有一篇很好的文章讨论了这一问题。

请检查数据库调用异常情况下是否关闭了连接。不确定如何关闭连接。但是,如果您使用的是普通JDBC,请确保在finally块中执行此操作。或者,如果您使用任何ORM实现或SpringDAO,他们会为您这样做。这已经得到了适当的注意,连接最终会关闭。