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);
,但我认为这是不对的
谢谢你的帮助
# 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 楼答案
MySQL connector/J没有池数据源实现。您需要使用第三方软件,或者使用容器附带的软件。我相信tomcat使用的是现成的commons dbcp
c3p0是另一个选项,它具有内置池的可直接构造的数据源