【问题标题】:HikariCP Connection Pool immediately creates 100 connectionsHikariCP 连接池立即创建 100 个连接
【发布时间】:2014-12-10 08:53:03
【问题描述】:

我有这段代码使用 HikariCP 连接池:

config.setMaximumPoolSize(100);
config.setDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
config.addDataSourceProperty("serverName", hostname);
config.addDataSourceProperty("port", portnumber);
config.addDataSourceProperty("databaseName", dbname);
config.addDataSourceProperty("user", username);
config.addDataSourceProperty("password", password);
config.setConnectionTimeout(30000);
config.setInitializationFailFast(false);
pooledDataSource = new HikariDataSource(config);

我通过发出命令“Show Processlist”来监控 mysql 中的连接,我看到在行之后创建了 100 个连接:

pooledDataSource = new HikariDataSource(config);

...正在运行。我敢肯定这不会发生,对吧?它应该稍后在我执行 pooledDataSource.getConnection() 时创建连接。

我做错了什么?为什么会立即创建 100 个连接?

【问题讨论】:

  • 顺便说一句,100 个连接可能太多了:github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
  • 下面的答案是正确的,对吧?请这样标记。
  • 试用 arivu 数据源 org.arivu.dbds。 Gradle 依赖编译组:'org.arivu',名称:'datasource',版本:'1.0.2'。它有更好的连接池实现。

标签: java mysql database-connection connection-pooling


【解决方案1】:

默认情况下,HikariCP 作为固定大小的池运行。您需要设置minimumIdle。就是这样。

来自minimumIdle的文档:

此属性控制空闲连接的最小数量 HikariCP 试图在池中维护。如果空闲连接下降 低于此值,HikariCP 将尽最大努力添加额外的 快速有效地连接。但是,为了获得最佳性能 和对尖峰需求的响应,我们建议不要设置这个 值,而是允许 HikariCP 充当固定大小的连接 水池。 默认值:与 maximumPoolSize 相同

【讨论】:

  • 这个设置有点冒险,因为它总是试图保持我们在应用程序中看到的最小空闲连接,这会继续强制建立连接。所以请谨慎使用。
猜你喜欢
  • 2019-05-09
  • 2021-08-24
  • 1970-01-01
  • 2017-09-16
  • 2015-12-15
  • 2022-10-06
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多