【问题标题】:MySQL JDBC connection pool maximum sizeMySQL JDBC 连接池最大大小
【发布时间】:2012-07-06 09:05:49
【问题描述】:

我正在用 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);,但我不认为这是正确的。

感谢您的帮助。

【问题讨论】:

  • 很明显你在谈论 java.sql.Connection 对象,对吧?您目前使用哪种池化机制或库?
  • 是的,我试图分别在javax.namingjavax.sql 中使用ContextDataSource 类来创建一个池,但似乎无法设置它的大小。
  • 我很困惑:如果您不使用上面提到的某些服务器,那么这个 DataSource 来自哪里?它必须在那里配置。

标签: java mysql connection-pooling


【解决方案1】:

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

c3p0 是另一个选项,它有一个可直接构建的数据源,其中内置了池。

【讨论】:

  • c3p0 是我最终使用的,因为如果不创建自己的池数据源似乎是不可能的。谢谢。
【解决方案2】:

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

hikari > 德鲁伊 > UCP > c3p0 > DBCP

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

【讨论】:

    猜你喜欢
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 2012-04-30
    • 2016-12-23
    • 1970-01-01
    相关资源
    最近更新 更多