开发者社区> 问答> 正文

为什么连接池里有5个核心线程连接,但每次总是获取同一个连接?

对同一个接口调用50次,发现druidDatasource获取的连接是同一个,这个是什么问题?

T9.png

下面是配置:

T10.png

原提问者GitHub用户lit2430

展开
收起
山海行 2023-07-05 17:59:34 77 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    接池是一种用于管理和维护数据库连接的技术,它可以提高应用程序的性能和可靠性,避免频繁地创建和关闭数据库连接。一般来说,连接池会维护一定数量的数据库连接,这些连接可以被多个线程共享使用。每个线程在使用连接池时,可以从连接池中获取一个空闲的连接,并在使用完毕后将连接释放回连接池中。

    根据您提供的信息,连接池中有5个核心线程连接,但在使用连接池时总是获取同一个连接,这可能是因为以下原因:

    连接池中只有一个连接可用:连接池中的5个核心线程连接可能都已经被其他线程占用,导致连接池中只有一个连接可用。在这种情况下,每次从连接池中获取连接时都会获取到同一个连接。

    连接池的最大连接数等于核心连接数:如果连接池的最大连接数等于核心连接数,那么连接池在初始化时就会创建5个连接,并将这些连接作为核心连接。在这种情况下,连接池中的所有连接都是核心连接,每次从连接池中获取连接时都会获取到同一个连接。

    获取连接的方式不正确:如果在使用连接池时,每次都创建一个新的连接,而不是从连接池中获取连接,那么每次获取的连接都是新创建的连接,这可能会导致多个线程获取到不同的连接,而不是同一个连接。

    2023-07-30 21:10:28
    赞同 展开评论 打赏
  • 连接池初始化好了之后,会放在一个DruidConnectionHolder[] connections数组里面,每个getConnection的时候,都是取这个数组的最后一个元素。所以你测试的场景,每次都是同一个连接。

    原回答者GitHub用户fengzhizi2022

    2023-07-06 10:42:11
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
多IO线程优化版 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载