我在server.xml中使用数据库(oracle)连接配置了openliberty (版本21),如下所示:
<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个连接的连接池以进行并行操作。
发布于 2021-09-10 07:53:37
根据您所描述的用法,如果空闲池中没有可用的连接,则连接池应在请求传入时创建连接。
您的connectionTimeout
配置为10秒。要确保您的测试真正并行运行,需要向服务器发出两个请求。服务器应该创建一个连接,使用它,等待11秒,然后关闭连接。
如果您的请求不是并行运行的,您将不会得到任何异常,因为第二个请求直到第一个请求完成后才会启动,这将是您的测试过程的一个问题。
如果您的请求是并行运行的,并且您没有从Liberty获得任何异常输出。那么Liberty可能正在建立多个连接,这可以通过启用J2C跟踪来确认。
请参阅:https://openliberty.io/docs/21.0.0.9/log-trace-configuration.html
启用: J2C=ALL
如果您的请求是并行运行的,并且创建的连接不超过一个,那么您将获得一个ConnectionWaitTimeoutException
。这可能是由于驱动程序无法创建多个连接、不正确使用Oracle连接池(UCP)或许多其他因素造成的。我需要更多的信息来调试这个问题。
https://stackoverflow.com/questions/69134370
复制相似问题