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