我有使用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个连接?
答案 0 :(得分:13)
默认情况下,HikariCP作为固定大小的池运行。您需要设置minimumIdle
。那就是它。
来自minimumIdle
的文档:
此属性控制最小空闲连接数 HikariCP试图在池中维护。如果空闲连接下降 低于此值,HikariCP将尽最大努力添加额外的 快速有效地建立联系。但是,为了获得最佳性能 并且对尖峰需求的响应能力,我们建议不要设置它 值,而是允许HikariCP充当固定大小的连接 池。 默认值:与maximumPoolSize相同