2

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

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

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

由于我没有使用任何这些,我找不到如何设置max pool size值。我还想避免这个项目的第三方库(例如 Apache Commons)。

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

我发现的唯一可能的参考是env.put(JNDIPooledSource.MAX_POOL_SIZE, 500);,但我不认为这是正确的。

谢谢你的帮助。

4

2 回答 2

1

MySQL 连接器/J 不附带 Pooled DataSource 实现。您将需要使用 3rd 方软件,或使用容器附带的软件。我相信tomcat开箱即用地使用commons-dbcp。

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

于 2012-07-06T00:40:08.113 回答
0

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

光 > 德鲁伊 > UCP > c3p0 > DBCP

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

于 2019-02-02T04:25:09.947 回答