有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java MySQL JDBC连接池最大大小

我正在用Java构建一个socket服务器。每个新的socket连接都会启动一个新线程,该线程需要连接到MySQL服务器

目前,我为每个线程都有一个新的连接,但我希望更改为一个连接池,以便更有效地回收连接

但是,此池的默认大小似乎是5个连接。我目前处理100多个客户端,5个连接是不够的。我发现的所有文档都提到了不同的服务器(Tomcat、JBoss、GlassFish等)以及如何将值放入它们的XML配置文件中

因为我没有使用任何这些,所以我找不到如何设置max pool size值。我还希望避免在这个项目中使用第三方库(比如apachecommons)

一个例外是用于Java的MySQL连接器(可在此处找到:http://dev.mysql.com/usingmysql/java/

我找到的唯一可能的参考是env.put(JNDIPooledSource.MAX_POOL_SIZE, 500);,但我认为这是不对的

谢谢你的帮助


共 (2) 个答案

  1. # 1 楼答案

    对于选择连接池库,我的建议是

    hikari>;德鲁伊>;UCP>;c3p0>;DBCP

    这是基于我所测试的,在我的本地测试环境中(docker/pool minSize=1,maxSize=8中的4GB mac/mysql),hikari可以服务1024个线程x 1024次来获得连接,每个线程完成连接的平均时间是100万或200万秒,而c3p0只能服务256个线程x1024次,每个线程的平均时间已经是2100万秒。(512个线程失败)

  2. # 2 楼答案

    MySQL connector/J没有池数据源实现。您需要使用第三方软件,或者使用容器附带的软件。我相信tomcat使用的是现成的commons dbcp

    c3p0是另一个选项,它具有内置池的可直接构造的数据源