HikariCP源码解析一创建数据库连接池

HikariCP是一个快速、简单、可靠的JDBC连接池。大约130Kb,相比于其它流行的数据库连接池非常的轻, spingboot2.0以及在国外非常有名的playFramework框架默认使用该连接池。

连接池 文件数 代码行数
Vibur 34 1927
HikariCP 21 2218
Tomcat-JDBC 31 6345
BoneCP 49 7293
C3P0 120 1550

HikariCP提供了多种创建数据库连接池的方式

  • 硬编码HikariConfig

    1
    2
    3
    4
    5
    6
    7
    8
    9
    HikariConfig config = new HikariConfig();
    config.setJdbcUrl("jdbc:mysql://localhost:3306/simpsons");
    config.setUsername("bart");
    config.setPassword("51mp50n");
    config.addDataSourceProperty("cachePrepStmts", "true");
    config.addDataSourceProperty("prepStmtCacheSize", "250");
    config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");

    HikariDataSource ds = new HikariDataSource(config);
  • 直接硬编码HikariDataSource

    1
    2
    3
    4
    5
    HikariDataSource ds = new HikariDataSource();
    ds.setJdbcUrl("jdbc:mysql://localhost:3306/simpsons");
    ds.setUsername("bart");
    ds.setPassword("51mp50n");
    ...
  • 加载properties文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    HikariConfig config = new HikariConfig("/some/path/hikari.properties");
    HikariDataSource ds = new HikariDataSource(config);


    example.properties

    dataSourceClassName=org.postgresql.ds.PGSimpleDataSource
    dataSource.user=test
    dataSource.password=test
    dataSource.databaseName=mydb
    dataSource.portNumber=5432
    dataSource.serverName=localhost
  • HikariConfig是一个用来设置数据库连接属性属性的普通java类。还给连接池设置了一些常用默认属性:

1
2
3
4
5
private static final long CONNECTION_TIMEOUT = SECONDS.toMillis(30);
private static final long VALIDATION_TIMEOUT = SECONDS.toMillis(5);
private static final long IDLE_TIMEOUT = MINUTES.toMillis(10);
private static final long MAX_LIFETIME = MINUTES.toMillis(30);
private static final int DEFAULT_POOL_SIZE = 10;

值得说明的是HikariCP还可以使用系统的一个默认属性:hikaricp.configurationFile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public HikariConfig() {
dataSourceProperties = new Properties();
healthCheckProperties = new Properties();

minIdle = -1;
maxPoolSize = -1;
maxLifetime = MAX_LIFETIME;
connectionTimeout = CONNECTION_TIMEOUT;
validationTimeout = VALIDATION_TIMEOUT;
idleTimeout = IDLE_TIMEOUT;
initializationFailTimeout = 1;
isAutoCommit = true;

String systemProp = System.getProperty("hikaricp.configurationFile");
if (systemProp != null) {
loadProperties(systemProp);
}
}

hikaricp.configurationFile,可用于指定属性文件的位置。 如果您打算使用此选项,则使用默认构造函数构造HikariConfig或HikariDataSource实例,HikariCP会加载该值对应的属性文件。