hikari如何切换数据源_hikari数据库连接池
中文 Chinese英文 English
0x01 使用方法
配置依賴:
com.zaxxer
HikariCP
2.6.2
項(xiàng)目沒用使用spring等一系列高大上的輪子,在接入連接池的時(shí)候無法去配置datasource,所以使用的是比較簡單粗暴的方式,手動創(chuàng)建HikariConfig,使用該對象去創(chuàng)建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。連接池內(nèi)的連接用完要釋放掉,推薦try-with-resources。
0x02 hikari注意點(diǎn)需要服務(wù)器同NTP服務(wù)器保持同步(https://dba.stackexchange.com/questions/171002/choice-of-connection-pooling-library-for-vm-deploys/171020)。
hikari不支持連接池層的preparestatement緩存,推薦使用jdbc驅(qū)動的preparestatement緩存。
hikari也不支持Log Statement Text/Slow Query Logging,因?yàn)榇蠖鄶?shù)的驅(qū)動都支持了。
0x03 hikari參數(shù)詳解allowPoolSuspension:連接池是否可以被jmx掛起,如果連接池被掛起,getConnection就不會超時(shí),默認(rèn)值false。
autoCommit:connection是否自動提交,默認(rèn)值true。
catalog:配置連接的數(shù)據(jù)庫。
connectionInitSql:創(chuàng)建連接前默認(rèn)執(zhí)行的sql語句,如果語句執(zhí)行失敗連接則失敗,然后重試連接,默認(rèn)值無。
connectionTestQuery:jdbc4以下版本的驅(qū)動可以設(shè)置這個參數(shù),用來支持jdbc4新提供的api,Connection.isValid(),默認(rèn)值無。
connectionTimeout:從池中獲取連接的最大等待時(shí)間,超時(shí)拋異常,默認(rèn)值30s。
dataSource:對一些Ioc框架有用,如果設(shè)置其他的datasource參數(shù)將被忽略,默認(rèn)值無。
dataSourceClassName:設(shè)置datasource jdbc驅(qū)動提供的類名,如果基于jdbc url的jdbc驅(qū)動則不須要設(shè)置,默認(rèn)值無。
dataSourceJNDI:默認(rèn)值無。
dataSourceProperties:datasource的properties。
driverClassName:基于jdbc url的jdbc驅(qū)動類。
healthCheckRegistry:Ioc框架在用,檢測當(dāng)前數(shù)據(jù)連接池的健康狀態(tài)。
idleTimeout:連接在池中閑置超過這個時(shí)間,則刪除。0表示空閑連接不刪除,默認(rèn)值10分鐘。
initializationFailFast:是否開啟failfast,默認(rèn)值true。
initializationFailTimeout:連接池初始連接的timeout值,單位毫秒。如果在timeout的期間內(nèi)無法初始化成功連接池,則拋出異常。如果設(shè)置為0,會嘗試重連,重連失敗則拋異常終止連接池,小于0表示不重連,默認(rèn)值1。
isolateInternalQueries:是否將連接池的查詢封裝在自己的事務(wù)中,這個屬性在autoCommit=false時(shí)生效,默認(rèn)false。
jdbc4ConnectionTest:jdbc4驅(qū)動的test sql。
jdbcUrl:jdbc url。
leakDetectionThreshold:內(nèi)存泄漏偵測入口,默認(rèn)值0。
maxLifetime:連接最大存活時(shí)間。
maximumPoolSize:最大的緩沖池大小。
metricRegistry:Ioc框架在用,統(tǒng)計(jì)當(dāng)前數(shù)據(jù)連接池的狀態(tài)。
minimumIdle:最小空閑的連接數(shù)。
password:密碼。
poolName:連接池名,給JMX用,默認(rèn)值自動生成。
readOnly:連接是否只讀,默認(rèn)值false。
registerMbeans:是否注冊管理構(gòu)建工具,默認(rèn)值false。
transactionIsolation:事務(wù)的隔離級別,默認(rèn)驅(qū)動默認(rèn)值。
username:用戶名。
validationTimeout:連接活動的超時(shí)時(shí)間,必須比connectionTimeout小,默認(rèn)250ms。
0x04 DataSource和DriverManager的對比
jdbc2.0開始使用了DataSource接口來創(chuàng)建連接。對比直接DriverManager的方式創(chuàng)建連接,DataSource會更優(yōu)雅一些??梢宰约簩?shí)現(xiàn)DataSource封裝創(chuàng)建連接的過程,也可以將DriverManager封裝成DataSource創(chuàng)建連接。而DriverManager需要顯示的將驅(qū)動類名硬編碼在代碼中。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
總結(jié)
以上是生活随笔為你收集整理的hikari如何切换数据源_hikari数据库连接池的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 反三角函数怎么表示_交流电的功率因数怎么
- 下一篇: linux cmake编译源码,linu