我在server.xml中配置了openliberty (version 21)与数据库(oracle)的连接:
<dataSource jndiName="jdbc/myds" transactional="true">
<connectionManager maxPoolSize="20" minPoolSize="5" agedTimeout="120s" connectionTimeout="10s"/>
<jdbcDriver libraryRef="jdbcLib" />
<properties.oracle URL="jdbc:oracle:thin:@..." user="..." password="..."/>
</dataSource>
服务器启动,我可以通过我的rest api对数据库进行查询,但我注意到我只使用1个活动数据库连接,并行http查询导致在该1连接上排队数据库查询。我通过监视活动的开放数据库连接和慢速查询(我并行地进行了几个rest调用)来验证了这一点。只打开一个连接,一个查询在另一个查询之后处理。如何打开一个连接池,例如5-20个连接,用于并行操作。
根据您描述的用法,如果空闲池中没有可用的连接,则连接池应该在请求进入时创建连接。
您的connectionTimeout
配置为10秒。要确保测试真正并行运行,可以向服务器发出两个请求。服务器应该创建一个连接,使用它,等待11秒,然后关闭连接。
如果你的请求不是并行运行的,你将不会得到任何异常,因为第二个请求不会在第一个请求完成之后开始,这将是你的测试过程中的一个问题。
如果你的请求是并行运行的,并且你没有从Liberty得到任何异常输出。那么Liberty可能正在建立多个连接,这可以通过启用J2C跟踪来确认。
见:https://openliberty.io/docs/21.0.0.9/log-trace-configuration.html
启用:J2C =
如果您的请求是并行运行的,并且正在创建的连接不超过一个,那么您将获得ConnectionWaitTimeoutException
。这可能是由于驱动程序无法创建多个连接、错误地使用Oracle连接池(UCP)或许多其他因素造成的。我需要更多的信息来调试这个问题。