SpringBoot那些好用的连接池HikariCP
HikariCP来自于日语,翻译过来是光的意思,由此可见,连接池非常的快。
HikariCP是什么
HikariCP是数据库连接池,而且是号称史上最快的,而且目前来看确实是这样的,SpringBoot2.0也已经采用HikariCP作为默认连接池配置.
HikariCP为什么这么快
-
字节码级别优化(很多方法通过JavaAssist生成)
代码量非常小,很多方法都没有写,是通过JavaAssist编译的时候是动态生成的。
-
大量小改进
-
用FastStatementList代替ArrayList
-
无锁集合ConcurrentBag(借鉴了.NET中的ConcurrentBag,在java中实现了自己的ConcurrentBag,对于高并发方面有些优化)
-
代理类的优化 (比如,用invokestatic代替了invokevirtual)
[invokestatic通过调用getProxyPreparedStatement静态方法生成了18个操作
invokevirtual通过ProxyFactory.getProxyPreparedStatement生成15个操作,由此可见。
-
在Spring Boot中的配置
Spring Boot 2.x
- 默认使用HikariCP
- 配置spring.datasource.hikari.* 配置
Spring Boot 1.x
- 默认使用Tomcat连接池,需要移除tomcat-jdbc依赖
- spring.datasource.type=com.zaxxer.hikari.HikariDataSource
HikariCP数据源配置源码:
/**
* Hikari DataSource configuration.
*/
@Configuration
@ConditionalOnClass(HikariDataSource.class)
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type",
havingValue = "com.zaxxer.hikari.HikariDataSource", matchIfMissing = true)
static class Hikari {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public HikariDataSource dataSource(DataSourceProperties properties) {
HikariDataSource dataSource = createDataSource(properties,
HikariDataSource.class);
if (StringUtils.hasText(properties.getName())) {
dataSource.setPoolName(properties.getName());
}
return dataSource;
}
}