200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > hikari如何切换数据源_hikari数据库连接池

hikari如何切换数据源_hikari数据库连接池

时间:2019-02-20 21:39:00

相关推荐

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服务器保持同步(/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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。