hikari如何切换数据源_hikari数据库连接池
中文 Chinese英文 English
0x01 使用方法
配置依賴:
com.zaxxer
HikariCP
2.6.2
項目沒用使用spring等一系列高大上的輪子,在接入連接池的時候無法去配置datasource,所以使用的是比較簡單粗暴的方式,手動創建HikariConfig,使用該對象去創建datasource。
private HikariDataSource initDataSource(String url, int jdbcPoolSize) {
HikariConfig config = new HikariConfig();
config.setDriverClassName("com.mysql.cj.jdbc.Driver");
config.setJdbcUrl(url);
config.setAutoCommit(false);
config.setConnectionTestQuery("SELECT 1;");
config.setMaximumPoolSize(jdbcPoolSize);
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
config.setMaxLifetime(MAX_LIFE_TIME);
config.setIdleTimeout(IDLE_TIMEOUT);
return new HikariDataSource(config);
}
接下來就可以使用datasource來得到connection。連接池內的連接用完要釋放掉,推薦try-with-resources。
0x02 hikari注意點需要服務器同NTP服務器保持同步(https://dba.stackexchange.com/questions/171002/choice-of-connection-pooling-library-for-vm-deploys/171020)。
hikari不支持連接池層的preparestatement緩存,推薦使用jdbc驅動的preparestatement緩存。
hikari也不支持Log Statement Text/Slow Query Logging,因為大多數的驅動都支持了。
0x03 hikari參數詳解allowPoolSuspension:連接池是否可以被jmx掛起,如果連接池被掛起,getConnection就不會超時,默認值false。
autoCommit:connection是否自動提交,默認值true。
catalog:配置連接的數據庫。
connectionInitSql:創建連接前默認執行的sql語句,如果語句執行失敗連接則失敗,然后重試連接,默認值無。
connectionTestQuery:jdbc4以下版本的驅動可以設置這個參數,用來支持jdbc4新提供的api,Connection.isValid(),默認值無。
connectionTimeout:從池中獲取連接的最大等待時間,超時拋異常,默認值30s。
dataSource:對一些Ioc框架有用,如果設置其他的datasource參數將被忽略,默認值無。
dataSourceClassName:設置datasource jdbc驅動提供的類名,如果基于jdbc url的jdbc驅動則不須要設置,默認值無。
dataSourceJNDI:默認值無。
dataSourceProperties:datasource的properties。
driverClassName:基于jdbc url的jdbc驅動類。
healthCheckRegistry:Ioc框架在用,檢測當前數據連接池的健康狀態。
idleTimeout:連接在池中閑置超過這個時間,則刪除。0表示空閑連接不刪除,默認值10分鐘。
initializationFailFast:是否開啟failfast,默認值true。
initializationFailTimeout:連接池初始連接的timeout值,單位毫秒。如果在timeout的期間內無法初始化成功連接池,則拋出異常。如果設置為0,會嘗試重連,重連失敗則拋異常終止連接池,小于0表示不重連,默認值1。
isolateInternalQueries:是否將連接池的查詢封裝在自己的事務中,這個屬性在autoCommit=false時生效,默認false。
jdbc4ConnectionTest:jdbc4驅動的test sql。
jdbcUrl:jdbc url。
leakDetectionThreshold:內存泄漏偵測入口,默認值0。
maxLifetime:連接最大存活時間。
maximumPoolSize:最大的緩沖池大小。
metricRegistry:Ioc框架在用,統計當前數據連接池的狀態。
minimumIdle:最小空閑的連接數。
password:密碼。
poolName:連接池名,給JMX用,默認值自動生成。
readOnly:連接是否只讀,默認值false。
registerMbeans:是否注冊管理構建工具,默認值false。
transactionIsolation:事務的隔離級別,默認驅動默認值。
username:用戶名。
validationTimeout:連接活動的超時時間,必須比connectionTimeout小,默認250ms。
0x04 DataSource和DriverManager的對比
jdbc2.0開始使用了DataSource接口來創建連接。對比直接DriverManager的方式創建連接,DataSource會更優雅一些。可以自己實現DataSource封裝創建連接的過程,也可以將DriverManager封裝成DataSource創建連接。而DriverManager需要顯示的將驅動類名硬編碼在代碼中。DataSource的方案會更面向連接池
0x05 hikari推薦配置
jdbcUrl=jdbc:mysql://localhost:3306/simpsons
user=test
password=test
dataSource.cachePrepStmts=true
dataSource.prepStmtCacheSize=250
dataSource.prepStmtCacheSqlLimit=2048
dataSource.useServerPrepStmts=true
dataSource.useLocalSessionState=true
dataSource.useLocalTransactionState=true
dataSource.rewriteBatchedStatements=true
dataSource.cacheResultSetMetadata=true
dataSource.cacheServerConfiguration=true
dataSource.elideSetAutoCommits=true
dataSource.maintainTimeStats=false
總結
以上是生活随笔為你收集整理的hikari如何切换数据源_hikari数据库连接池的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 反三角函数怎么表示_交流电的功率因数怎么
- 下一篇: mysql root 访问被拒绝_用户'