如何在HikariCP中创建新连接并在以后检索它们

min*_*sel 7 java hikaricp

有人会关心HikariCP如何处理池中的连接吗?如何在池中添加新连接,以及如何在以后调用/检索它?

这是我目前的代码:

    HikariConfig config = new HikariConfig();
    config.setMaximumPoolSize(100);

    config.setDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
    config.addDataSourceProperty("serverName", "localhost");
    config.addDataSourceProperty("port", "8889");
    config.addDataSourceProperty("databaseName", "XXX");
    config.addDataSourceProperty("user", "XXX");
    config.addDataSourceProperty("password", "XXX");

    System.out.print("qq");

    HikariDataSource ds = new HikariDataSource(config);
    ds.setConnectionTimeout(800);
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 13

使用池时,不会向池添加连接以便稍后检索它.您可以执行完全相反的操作:在需要时从池中获取连接,并在完成连接后关闭连接以将其返回池中.正如其名称所示,HikariDataSource是一个DataSource.DataSource是一个从中获取连接的对象.

池为您处理连接的打开.如果没有自动连接等,它会让您进入等待队列.

根据池的属性,池可以立即打开连接或按需打开连接,保持始终打开给定数量的连接,在给定的未使用时间量后缩小池大小等.

这些都有很好的记录:https://github.com/brettwooldridge/HikariCP#user-content-configuration-knobs-baby

示例代码(Java 7及更高版本):

try (Connection connection = ds.getConnection()) {
    // use the connection
}
Run Code Online (Sandbox Code Playgroud)

示例代码(在Java 7之前):

Connection connection = ds.getConnection();
try {
    // use the connection
}
finally {
    connection.close();
}
Run Code Online (Sandbox Code Playgroud)

  • 调用getConnection()时池返回给您的连接不是physycal数据库连接.它是围绕实际物理连接的包装器(代理).在此代理上调用close()不会关闭物理连接.它所做的就是回馈与游泳池的连接. (11认同)