【问题标题】:Openliberty datasource always uses 1 database connectionOpenliberty 数据源始终使用 1 个数据库连接
【发布时间】:2021-11-07 01:48:15
【问题描述】:

我在 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 个连接对数据库查询进行排队。 我通过监控活动的打开数据库连接和慢速查询来验证这一点(我并行进行了几个休息调用)。仅打开 1 个连接,并且 1 个查询是一个接一个地处理。如何打开一个连接池,例如 5-20 个连接以进行并行操作。

【问题讨论】:

  • 在您获得连接的位置添加代码。从配置来看,您应该使用池,但您的应用可能会限制打开的连接数。

标签: database oracle datasource connection-pooling open-liberty


【解决方案1】:

根据您描述的使用情况,如果空闲池中没有可用的连接,连接池应该在请求进入时创建连接。

您的 connectionTimeout 配置为 10 秒。为了确保您的测试真正并行运行,将向服务器发出两个请求。服务器应该创建一个连接,使用它,等待 11 秒,然后关闭连接。

如果您的请求没有并行运行,您将不会收到任何异常,因为第二个请求要等到第一个请求完成后才会开始,这将是您的测试过程的问题。

如果您的请求是并行运行的,并且您没有从 Liberty 获得任何异常输出。然后 Liberty 可能会建立多个连接,这可以通过启用 J2C 跟踪来确认。

见:https://openliberty.io/docs/21.0.0.9/log-trace-configuration.html

启用:J2C=ALL

如果您的请求是并行运行的,并且创建的连接不超过一个,那么您将获得ConnectionWaitTimeoutException。这可能是由于驱动程序无法创建多个连接、错误使用 Oracle 连接池 (UCP) 或许多其他因素造成的。我需要更多信息来调试该问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多