1. 程式人生 > >HikariCP的基本使用和屬性詳解

HikariCP的基本使用和屬性詳解

一、主要配置

1、dataSourceClassName
這是DataSourceJDBC驅動程式提供的類的名稱。請查閱您的特定JDBC驅動程式的文件以獲取此類名稱,或參閱下表。注XA資料來源不受支援。XA需要像bitronix這樣的真正的事務管理器 。請注意,如果您正在使用jdbcUrl“舊式”基於DriverManager的JDBC驅動程式配置,則不需要此屬性 。 預設值:無

2、jdbcUrl
該屬性指示HikariCP使用“基於DriverManager的”配置。我們認為基於DataSource的配置(上圖)由於各種原因(參見下文)是優越的,但對於許多部署來說,幾乎沒有顯著差異。 在“舊”驅動程式中使用此屬性時,您可能還需要設定該 driverClassName屬性,但不要先嚐試。 請注意,如果使用此屬性,您仍然可以使用DataSource屬性來配置您的驅動程式,實際上建議您使用URL本身中指定的驅動程式引數。 預設值:無

3、username
此屬性設定從基礎驅動程式獲取連線時使用的預設身份驗證使用者名稱。請注意,對於DataSources,這通過呼叫DataSource.getConnection(*username*, password)基礎DataSource 以非常確定的方式工作。但是,對於基於驅動程式的配置,每個驅動程式都不同。在基於驅動程式的情況下,HikariCP將使用此username屬性來設定傳遞給驅動程式呼叫的user屬性。如果這不是你所需要的,例如完全跳過這個方法並且呼叫。 預設值:無PropertiesDriverManager.getConnection(jdbcUrl, props)addDataSourceProperty("username", ...)

4、password
此屬性設定從基礎驅動程式獲取連線時使用的預設身份驗證密碼。請注意,對於DataSources,這通過呼叫DataSource.getConnection(username, *password*)基礎DataSource 以非常確定的方式工作。但是,對於基於驅動程式的配置,每個驅動程式都不同。在基於驅動程式的情況下,HikariCP將使用此password屬性來設定傳遞給驅動程式呼叫的password屬性。如果這不是你所需要的,例如完全跳過這個方法並且呼叫。 預設值:無PropertiesDriverManager.getConnection(jdbcUrl, props)addDataSourceProperty("pass", ...)

 

二、常用配置

5、autoCommit
此屬性控制從池返回的連線的預設自動提交行為。它是一個布林值。 預設值:true

6、 connectionTimeout
此屬性控制客戶端(即您)將等待來自池的連線的最大毫秒數。如果在沒有可用連線的情況下超過此時間,則會丟擲SQLException。最低可接受的連線超時時間為250 ms。 預設值:30000(30秒)

7、 idleTimeout
此屬性控制允許連線在池中閒置的最長時間。 此設定僅適用於minimumIdle定義為小於maximumPoolSize。一旦池達到連線,空閒連線將不會退出minimumIdle。連線是否因閒置而退出,最大變化量為+30秒,平均變化量為+15秒。在超時之前,連線永遠不會退出。值為0意味著空閒連線永遠不會從池中刪除。允許的最小值是10000ms(10秒)。 預設值:600000(10分鐘)

8、 maxLifetime
此屬性控制池中連線的最大生存期。正在使用的連線永遠不會退休,只有在關閉後才會被刪除。在逐個連線的基礎上,應用較小的負面衰減來避免池中的大量消失。 我們強烈建議設定此值,並且應該比任何資料庫或基礎設施規定的連線時間限制短几秒。 值為0表示沒有最大壽命(無限壽命),當然是idleTimeout設定的主題。 預設值:1800000(30分鐘)

9、connectionTestQuery
如果您的驅動程式支援JDBC4,我們強烈建議您不要設定此屬性。這是針對不支援JDBC4的“傳統”驅動程式Connection.isValid() API。這是在連線從池中獲得連線以確認與資料庫的連線仍然存在之前將要執行的查詢。再一次,嘗試執行沒有此屬性的池,如果您的驅動程式不符合JDBC4的要求,HikariCP將記錄一個錯誤以告知您。 預設值:無

10、minimumIdle
該屬性控制HikariCP嘗試在池中維護的最小空閒連線數。如果空閒連線低於此值並且連線池中的總連線數少於此值maximumPoolSize,則HikariCP將盡最大努力快速高效地新增其他連線。但是,為了獲得最佳效能和響應尖峰需求,我們建議不要設定此值,而是允許HikariCP充當固定大小的連線池。 預設值:與maximumPoolSize相同

11、maximumPoolSize
此屬性控制池允許達到的最大大小,包括空閒和正在使用的連線。基本上這個值將決定到資料庫後端的最大實際連線數。對此的合理價值最好由您的執行環境決定。當池達到此大小並且沒有空閒連線可用時,對getConnection()的呼叫將connectionTimeout在超時前阻塞達幾毫秒。請閱讀關於游泳池尺寸。 預設值:10

12、metricRegistry
該屬性僅通過程式設計配置或IoC容器可用。該屬性允許您指定池使用的Codahale / Dropwizard 例項MetricRegistry來記錄各種指標。有關 詳細資訊,請參閱Metrics維基頁面。 預設值:無

13、healthCheckRegistry
該屬性僅通過程式設計配置或IoC容器可用。該屬性允許您指定池使用的Codahale / Dropwizard 的例項HealthCheckRegistry來報告當前的健康資訊。有關 詳細資訊,請參閱健康檢查 wiki頁面。 預設值:無

14、poolName
此屬性表示連線池的使用者定義名稱,主要出現在日誌記錄和JMX管理控制檯中以識別池和池配置。 預設:自動生成

 

maven的jar

<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>2.6.2</version>
        </dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

java示例程式碼:

public static void main(String[] args) throws SQLException {
        //例項化類
        HikariConfig hikariConfig = new HikariConfig();
        //設定url
        hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/crm?characterEncoding=UTF-8");
        //資料庫帳號
        hikariConfig.setUsername("root");
        //資料庫密碼
        hikariConfig.setPassword("root");
        hikariConfig.addDataSourceProperty("cachePrepStmts", "true");
        hikariConfig.addDataSourceProperty("prepStmtCacheSize", "250");
        hikariConfig.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
        HikariDataSource ds = new HikariDataSource(hikariConfig);
        Connection conn = null;
        Statement statement = null;
        ResultSet rs = null;
        try {
            conn = ds.getConnection();
            statement = conn.createStatement();
            rs = statement.executeQuery("select * from sys_user");
            while (rs.next()) {
                System.out.println(rs.getString("usr_name"));
                System.out.println(rs.getString("usr_password"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            if (conn != null) {
                conn.close();
                }
            }
        }

節選自:https://blog.csdn.net/Maskkiss/article/details/82115149