HikariCP 資料庫連接池
迄今為止,性能最好,速度最快的資料庫連接池,
依賴項
Java 8 thru 11 maven artifact:
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.5</version>
</dependency>
Java 7 maven artifact (maintenance mode):
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP-java7</artifactId>
<version>2.4.13</version>
</dependency>
Java 6 maven artifact (maintenance mode):
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP-java6</artifactId>
<version>2.3.13</version>
</dependency>
HikariCP的jdbc驅動名和資料源類名對應串列
Here is a list of JDBC DataSource classes for popular databases:
Database Driver DataSource class
Apache Derby Derby org.apache.derby.jdbc.ClientDataSource
Firebird Jaybird org.firebirdsql.ds.FBSimpleDataSource
H2 H2 org.h2.jdbcx.JdbcDataSource
HSQLDB HSQLDB org.hsqldb.jdbc.JDBCDataSource
IBM DB2 IBM JCC com.ibm.db2.jcc.DB2SimpleDataSource
IBM Informix IBM Informix com.informix.jdbcx.IfxDataSource
MS SQL Server Microsoft com.microsoft.sqlserver.jdbc.SQLServerDataSource
MySQL Connector/J com.mysql.jdbc.jdbc2.optional.MysqlDataSource
MariaDB MariaDB org.mariadb.jdbc.MariaDbDataSource
Oracle Oracle oracle.jdbc.pool.OracleDataSource
OrientDB OrientDB com.orientechnologies.orient.jdbc.OrientDataSource
PostgreSQL pgjdbc-ng com.impossibl.postgres.jdbc.PGDataSource
PostgreSQL PostgreSQL org.postgresql.ds.PGSimpleDataSource
SAP MaxDB SAP com.sap.dbtech.jdbc.DriverSapDB
SQLite xerial org.sqlite.SQLiteDataSource
SyBase jConnect com.sybase.jdbc4.jdbc.SybDataSource補充(實際上postgreSQL官方jdbc驅動使用下面這個類名):
PostgreSQL PostgreSQL org.postgresql.Driver
HikariCP配置屬性全覽
HikariCP帶有合理的默認值,在大多數部署中都可以正常運行,而無需進行其他調整,每個屬性都是可選的,但以下標記的“必需”除外,
📎HikariCP使用毫秒作為所有時間值,
HikariCP依靠準確的計時器來提高性能和可靠性,您的服務器必須與時間源(例如NTP服務器)同步,特別是如果您的服務器在虛擬機中運行,為什么?在這里閱讀更多,不要依靠虛擬機監控程式設定來“同步”虛擬機的時鐘,在虛擬機內部配置時間源同步,如果您是由于時間缺乏同步而尋求支持,則會在Twitter上公開嘲諷您,
這個是真的,如果因為時間漂移問題導致無法獲取連接這個問題去問作者會被噴,
Essentials(必需的配置)
🔠dataSourceClassName
這是JDBC驅動程式提供的DataSource類的名稱,有關特定的JDBC驅動程式的資訊,請查閱檔案以獲取該類名,或參閱下表,注意不支持XA資料源, XA需要像bitronix這樣的真實事務管理器,請注意,如果您使用jdbcUrl進行基于“老式”基于DriverManager的JDBC驅動程式配置,則不需要此屬性,默認值:無
- 或 -
🔠jdbcUrl
此屬性指示HikariCP使用“基于DriverManager的”配置,我們認為基于資料源的配置(上文)優于多種原因(請參見下文),但是對于許多部署而言,差異不大,當將此屬性與“舊”驅動程式一起使用時,您可能還需要設定driverClassName屬性,但首先嘗試不使用該屬性,請注意,如果使用此屬性,則仍可以使用DataSource屬性來配置驅動程式,實際上,建議您對URL本身中指定的驅動程式引數進行推薦,默認值:無
實際上,大部分實際應用中,HikariCP都不能通過jdbcUrl決議出正確的driverClassName,所以我認為driverClassName是必須的,所以我把driverClassName從不常用配置提升到必須配置,
🔠driverClassName
HikariCP將嘗試僅通過jdbcUrl通過DriverManager來決議驅動程式,但是對于某些較舊的驅動程式,還必須指定driverClassName,除非獲得明顯的錯誤訊息指示未找到驅動程式,否則請忽略此屬性,默認值:無
🔠username(用戶名)
此屬性設定從基礎驅動程式獲取連接時使用的默認身份驗證用戶名,請注意,對于DataSources,這可以通過在基礎DataSource上呼叫DataSource.getConnection(* username *,password)以非常確定的方式進行,但是,對于基于驅動程式的配置,每個驅動程式都是不同的,對于基于驅動程式的情況,HikariCP將使用此用戶名屬性在傳遞給驅動程式的DriverManager.getConnection(jdbcUrl,props)呼叫的屬性中設定用戶屬性,如果這不是您所需要的,請完全跳過此方法,并例如呼叫addDataSourceProperty(“ username”,...),默認值:無
🔠password(密碼)
此屬性設定從基礎驅動程式獲取連接時使用的默認身份驗證密碼,請注意,對于DataSources,這可以通過在基礎DataSource上呼叫DataSource.getConnection(username,* password *)以非常確定的方式進行,但是,對于基于驅動程式的配置,每個驅動程式都是不同的,對于基于驅動程式的情況,HikariCP將使用此密碼屬性在傳遞給驅動程式的DriverManager.getConnection(jdbcUrl,props)呼叫的屬性中設定密碼屬性,如果這不是您所需要的,請完全跳過此方法,例如,呼叫addDataSourceProperty(“ pass”,...),默認值:無
Frequently used(以下是經常使用的配置屬性)
autoCommit
此屬性控制從池回傳的連接的默認自動提交行為,它是一個布林值,默認值:true
?connectionTimeout
此屬性控制客戶端(即您)等待來自池的連接的最大毫秒數,如果超過此時間而沒有可用的連接,則會拋出SQLException,可接受的最低連接超時為250 ms,默認值:30000(30秒)
?idleTimeout
此屬性控制允許連接在池中保持空閑狀態的最長時間,僅當minimumIdle定義為小于maximumPoolSize時,此設定才適用,一旦池達到MinimumIdle連接,空閑連接將不被取消,連接是否以空閑狀態退役,最大變化為+30秒,平均變化為+15秒,在此超時之前,連接永遠不會因為空閑而退役,值為0表示永遠不會從池中洗掉空閑連接,最小允許值為10000ms(10秒),默認值:600000(10分鐘)
?maxLifetime(最大生存時間)
此屬性控制池中連接的最大生存期,使用中的連接永遠不會退出,只有在關閉連接后才將其洗掉,在逐個連接的基礎上,應用較小的負衰減以避免池中的質量消滅,我們強烈建議設定此值,它應該比任何資料庫或基礎結構施加的連接時間限制短幾秒鐘,值0表示沒有最大生存期(無限生存期),當然要遵守idleTimeout設定,最小允許值為30000ms(30秒),默認值:1800000(30分鐘)
connectionTestQuery(連接測驗查詢)
如果您的驅動程式支持JDBC4,我們強烈建議不要設定此屬性,這是針對不支持JDBC4 Connection.isValid()API的“舊版”驅動程式的,這是將在從池中為您提供連接之前執行的查詢,以驗證與資料庫的連接仍然有效,同樣,嘗試運行不帶該屬性的池,如果驅動程式不兼容JDBC4,HikariCP將記錄錯誤,默認值:無
🔢minimumIdle(最小空閑連接數)
此屬性控制HikariCP嘗試在池中維護的最小空閑連接數,如果空閑連接下降到該值以下,并且池中的總連接數小于maximumPoolSize,則HikariCP將盡最大努力快速而有效地添加其他連接,但是,為了獲得最佳性能和對峰值需求的回應能力,建議不要設定該值,而應讓HikariCP充當固定大小的連接池,默認值:與maximumPoolSize相同
🔢maximumPoolSize(最大空閑連接數)
此屬性控制允許池達到的最大大小,包括空閑和使用中的連接,基本上,此值將確定到資料庫后端的最大實際連接數,合理的值最好由您的執行環境確定,當池達到此大小,并且沒有空閑連接可用時,在超時之前,對getConnection()的呼叫將最多阻塞connectionTimeout毫秒,請閱讀有關池大小的資訊,默認值:10
📈metricRegistry
此屬性僅可通過編程配置或IoC容器使用,此屬性允許您指定Codahale / Dropwizard MetricRegistry的實體,池將使用該實體來記錄各種指標,有關詳細資訊,請參見Metrics Wiki頁面,默認值:無
📈healthCheckRegistry
此屬性僅可通過編程配置或IoC容器使用,此屬性允許您指定Codahale / Dropwizard HealthCheckRegistry的實體,池將使用該實體來報告當前的健康資訊,有關詳細資訊,請參見運行狀況檢查Wiki頁面,默認值:無
🔠poolName
該屬性表示連接池的用戶定義名稱,主要出現在日志記錄和JMX管理控制臺中,以識別池和池配置,默認值:自動生成
Infrequently used(以下是很少的使用配置屬性)
?initializationFailTimeout
此屬性控制如果無法為初始連接成功播種池,則池是否將“快速失敗”,任何正數都將視為嘗試獲取初始連接的毫秒數;在此期間,應用程式執行緒將被阻止,如果在此超時發生之前無法獲取連接,則將引發例外,此超時在connectionTimeout時間段之后應用,如果值為零(0),則HikariCP將嘗試獲取并驗證連接,如果獲得連接但驗證失敗,則將引發例外并且池不啟動,但是,如果無法獲得連接,則池將啟動,但是以后獲得連接的努力可能會失敗,小于零的值將繞過任何初始連接嘗試,并且池將在嘗試在后臺獲取連接時立即啟動,因此,以后獲得連接的努力可能會失敗,默認值:1
?isolateInternalQueries
此屬性確定HikariCP是否在其自身的事務中隔離內部池查詢,例如連接活動測驗,由于這些通常是只讀查詢,因此幾乎沒有必要將它們封裝在自己的事務中,僅當禁用autoCommit時,此屬性才適用,默認值:false
?allowPoolSuspension
此屬性控制是否可以通過JMX暫停和恢復池,這對于某些故障轉移自動化方案很有用,當池掛起時,對getConnection()的呼叫不會超時,并且將保持到恢復池為止,默認值:false
?readOnly
此屬性控制默認情況下從池獲得的連接是否處于只讀模式,請注意,某些資料庫不支持只讀模式的概念,而另一些資料庫在將Connection設定為只讀時提供查詢優化,是否需要此屬性在很大程度上取決于您的應用程式和資料庫,默認值:false
?registerMbeans
此屬性控制是否注冊JMX管理Bean(“ MBean”),默認值:false
🔠catalog
此屬性為支持目錄概念的資料庫設定默認目錄,如果未指定此屬性,則使用JDBC驅動程式定義的默認目錄,默認值:驅動程式默認值
🔠connectionInitSql
此屬性設定一個SQL陳述句,該陳述句將在每次創建新連接后執行,然后再將其添加到池中,如果此SQL無效或引發例外,它將被視為連接失敗,并且將遵循標準的重試邏輯,默認值:無
transactionIsolation
此屬性控制從池回傳的連接的默認事務隔離級別,如果未指定此屬性,則使用JDBC驅動程式定義的默認事務隔離級別,僅當您具有所有查詢通用的特定隔離要求時,才使用此屬性,此屬性的值是Connection類中的常量名稱,例如TRANSACTION_READ_COMMITTED,TRANSACTION_REPEATABLE_READ等,默認值:驅動程式默認值
?validationTimeout
此屬性控制將測驗連接的活動性的最長時間,此值必須小于connectionTimeout,可接受的最低驗證超時為250毫秒,默認值:5000
?leakDetectionThreshold
此屬性控制在記錄表示可能的連接泄漏的訊息之前,連接可以離開池的時間,值為0表示禁用泄漏檢測,啟用泄漏檢測的最低可接受值為2000(2秒),默認值:0
?dataSource
此屬性僅可通過編程配置或IoC容器使用,此屬性使您可以直接設定要由池包裝的DataSource實體,而不是讓HikariCP通過反射構造它,這在某些依賴項注入框架中可能很有用,指定此屬性后,將忽略dataSourceClassName屬性和所有特定于DataSource的屬性,默認值:無
🔠schema
此屬性為支持模式概念的資料庫設定默認模式,如果未指定此屬性,則使用JDBC驅動程式定義的默認模式,默認值:驅動程式默認值
?threadFactory
此屬性僅可通過編程配置或IoC容器使用,此屬性允許您設定java.util.concurrent.ThreadFactory的實體,該實體將用于創建池使用的所有執行緒,在某些只能通過應用程式容器提供的ThreadFactory創建執行緒的受限執行環境中,需要使用它,默認值:無
?scheduledExecutor
此屬性僅可通過編程配置或IoC容器使用,該屬性允許您設定java.util.concurrent.ScheduledExecutorService的實體,該實體將用于各種內部計劃的任務,如果向HikariCP提供ScheduledThreadPoolExecutor實體,則建議使用setRemoveOnCancelPolicy(true),默認值:無
在spring配置中如何初始化HikariCP的datasource
使用com.zaxxer.hikari.HikariDataSource類作為連接池初始化類
<!--連接池配置-->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<property name="poolName" value="${hikari.poolName}" />
<property name="autoCommit" value="${hikari.autoCommit}" />
<property name="driverClassName" value="${hikari.driverClassName}"></property>
<property name="jdbcUrl" value="${hikari.jdbcUrl}" />
<property name="username" value="${hikari.username}" />
<property name="password" value="${hikari.password}" />
<property name="maximumPoolSize" value="${hikari.maximumPoolSize}" />
<property name="minimumIdle" value="${hikari.minimumIdle}" />
<property name="connectionTimeout" value="${hikari.connectionTimeout}" />
<property name="idleTimeout" value="${hikari.idleTimeout}" />
<property name="maxLifetime" value="${hikari.maxLifetime}" />
<property name="connectionTestQuery" value="${hikari.connectionTestQuery}" />
</bean>
在springboot中如何初始化HikariCP
在application.properties組態檔中配置
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
其他引數與springboot正常連接配置相同,對應引數值參考上面的spring連接池配置引數
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/78636.html
標籤:其他
上一篇:用大白菜裝Ubuntu18報錯
